• 旅行家


    Description

    旅行家Sam要游玩N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。

    Sam准备从第S号城市出发,他想知道如果自己要去参观第K号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。

    Input

    第一行输入一个整数T表示测试数据共有T (1 ≤ T ≤ 5) 组。

    每组测试数据的第一行输入一个正整数N (1 ≤ N ≤ 100000) 和一个正整数S (1 ≤ S ≤ 100000),N表示城市的总个数,S表示起点城市编号。

    随后的N-1行,每行有两个正整数a,b (1 ≤ a,b ≤ N),表示第a号城市和第b号城市之间有一条路连通。

    Output

    每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号。(其中i=S时,请输出-1)

    Sample Input

    1
    4 1
    1 2
    1 3
    2 4
    

    Sample Output

    -1 1 1 2
    


     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 int n;
     5 int m,s;
     6 vector<vector<int> > vec;//用邻接表来存储图 
     7 vector<int> f;//来存储各个城市的前一个城市 
     8 void dfs(int s){
     9     int len=vec[s].size();//len存储的是s城市与几个城市之间有路 
    10     for(int i=0;i<len;i++){
    11         if(f[vec[s][i]])//如果去过这个城市,那就跳过,防止走重复的路 
    12             continue;
    13         f[vec[s][i]]=s;//到达vec[s][i]城市必须经过的前一个城市是s 
    14         dfs(vec[s][i]);    //继续从vec[s][i]城市开始搜索 
    15     }
    16 }
    17 int main(){
    18     scanf("%d",&n);
    19     while(n--){
    20         scanf("%d%d",&m,&s);
    21         vec.resize(m+1);
    22         f.assign(m+1,0);
    23         for(int i=1;i<m;i++){
    24             int a,b;
    25             scanf("%d%d",&a,&b);
    26             vec[a].push_back(b);//用邻接表来存储 
    27             vec[b].push_back(a);
    28         }
    29         f[s]=-1;
    30         dfs(s);
    31         for(int i=1;i<=m;i++){
    32             printf("%d ",f[i]);
    33         }
    34         printf("
    ");
    35         vec.clear();
    36     }
    37     return 0;
    38 }


    这道题的思路就是搜索,从开始的城市开始搜索,
    假设开始的城市是a
    a城市与b城市之间有路,并紧邻着
    那么去b城市必须要经过的城市就是a,
    就这样依此类推
    这道题有一个点就是数据太大,
    要是用邻接矩阵来存储图肯定不行
    所以要用邻接表来存储


  • 相关阅读:
    接水果(fruit)
    大融合
    排序(sortb)
    latex公式测试
    次小生成树
    HDU 2973 YAPTCHA (威尔逊定理)
    状压DP概念 及例题(洛谷 P1896 互不侵犯)
    ICPC Asia Nanning 2017 F. The Chosen One (大数、规律、2的k次幂)
    HDU 1074 Doing Homework (状压DP)
    最长上升(不下降)子序列(LIS) 不同求解方法(动规、贪心)
  • 原文地址:https://www.cnblogs.com/fate-/p/12328076.html
Copyright © 2020-2023  润新知