zoukankan      html  css  js  c++  java
  • D

    D - Transit Tree Path


    Time limit : 2sec / Memory limit : 256MB

    Score : 400 points

    Problem Statement

    You are given a tree with N vertices.
    Here, a tree is a kind of graph, and more specifically, a connected undirected graph with N1 edges, where N is the number of its vertices.
    The i-th edge (1iN1) connects Vertices ai and bi, and has a length of ci.

    You are also given Q queries and an integer K. In the j-th query (1jQ):

    • find the length of the shortest path from Vertex xj and Vertex yj via Vertex K.

    Constraints

    • 3N105
    • 1ai,biN(1iN1)
    • 1ci109(1iN1)
    • The given graph is a tree.
    • 1Q105
    • 1KN
    • 1xj,yjN(1jQ)
    • xjyj(1jQ)
    • xjK,yjK(1jQ)

    Input

    Input is given from Standard Input in the following format:

    N  
    a1 b1 c1  
    :  
    aN1 bN1 cN1
    Q K
    x1 y1
    :  
    xQ yQ
    

    Output

    Print the responses to the queries in Q lines.
    In the j-th line j(1jQ), print the response to the j-th query.


    Sample Input 1

    5
    1 2 1
    1 3 1
    2 4 1
    3 5 1
    3 1
    2 4
    2 3
    4 5
    

    Sample Output 1

    3
    2
    4
    

    The shortest paths for the three queries are as follows:

    • Query 1: Vertex 2 → Vertex 1 → Vertex 2 → Vertex 4 : Length 1+1+1=3
    • Query 2: Vertex 2 → Vertex 1 → Vertex 3 : Length 1+1=2
    • Query 3: Vertex 4 → Vertex 2 → Vertex 1 → Vertex 3 → Vertex 5 : Length 1+1+1+1=4

    Sample Input 2

    7
    1 2 1
    1 3 3
    1 4 5
    1 5 7
    1 6 9
    1 7 11
    3 2
    1 3
    4 5
    6 7
    

    Sample Output 2

    5
    14
    22
    

    The path for each query must pass Vertex K=2.


    Sample Input 3

    10
    1 2 1000000000
    2 3 1000000000
    3 4 1000000000
    4 5 1000000000
    5 6 1000000000
    6 7 1000000000
    7 8 1000000000
    8 9 1000000000
    9 10 1000000000
    1 1
    9 10
    

    Sample Output 3

    17000000000
    
    linux有毒啊,昨天就写好了,一直说我编译不通过,找了好久都不知道怎么回事,早上就直接交一次,就过了,
    什么情况啊,貌似他一直说我的v[x].push_back({y,z});这样写不能通过编译,哭死.
    这个就是树啦,然后就用dfs就成了,代码挺短的,但是看到别人的怎么要差不多100行,可怕.
     1 #include <bits/stdc++.h>
     2 #define mem(a) memset(a,0,sizeof(a))
     3 #define N 100010
     4 #define ll long long int
     5 using namespace std;
     6 ll an[N];
     7 struct Node{
     8   int to;
     9   ll cost;
    10 };
    11 vector<Node> v[N];
    12 void dfs(int x,int fa){
    13   for(int i=0;i<v[x].size();i++){
    14     if(v[x][i].to==fa)
    15       continue;
    16     an[v[x][i].to]=an[x]+v[x][i].cost;
    17     dfs(v[x][i].to,x);
    18   }
    19 }
    20 int main(){
    21   int n;
    22   scanf("%d", &n);
    23   int x,y;
    24   ll z;
    25   for(int i=1;i<n;i++){
    26     scanf("%d%d%lld",&x,&y,&z);
    27     v[x].push_back({y,z});
    28     v[y].push_back({x,z});
    29   }
    30   int q,t;
    31   scanf("%d%d",&q,&t);
    32   dfs(t,-1);
    33   while(q--){
    34     scanf("%d%d",&x,&y);
    35     printf("%lld
    ",an[x]+an[y]);
    36   }
    37   return 0;
    38 }
  • 相关阅读:
    [MetaHook] Quake FMOD player demo
    [MetaHook] Quake FMOD function
    [MetaHook] Load TGA texture to OpenGL
    [MetaHook] R_RicochetSprite
    [MetaHook] R_SparkStreaks
    [MetaHook] R_SparkEffect
    [MetaHook] R_SparkShower
    [MetaHook] Load large texture from model
    [MetaHook] Quake Bink function
    变量命名规范
  • 原文地址:https://www.cnblogs.com/zllwxm123/p/7356762.html
Copyright © 2011-2022 走看看