吝啬的国度 ---用vector 来构图

根据题目可以看出来  有n 个城市 只有 n-1  条路线 那么  就可以确定这个图中  不存在 圆  所以从一个点到另一个点 只有一条唯一的路  所以从一个节点到另一个节点 那么 这个节点只有一个唯一的上节点

 1 /*   偶说不是一种形式 而是一种思想   小伙子当你悟透这句话的时候就没有你不能做的题了.   */
 2 #include<stdio.h>
 3 #include<vector>
 4 #include<string.h>
 5 using namespace std;
 6 vector<int>v[100005];   //   用不定长数组  去
 7 int city[100005];
 8 void DFS(int n)
 9 {
10     for(int i=0;i<v[n].size();++i)   //  和 n  每个相邻的 城市都遍历一次
11     {
12         if(city[v[n][i]])
13             continue;
14         city[v[n][i]]=n;
15         DFS(v[n][i]);
16     }
17 }
18 int main()
19 {
20     int n,m,t,i,a,b;
21     scanf("%d",&t);
22     while(t--)
23     {
24         memset(city,0,sizeof(city));
25         memset(v,0,sizeof(v));
26         scanf("%d%d",&n,&m);
27         city[m]=-1;
28         for(i=0;i<n-1;i++)
29         {
30             scanf("%d%d",&a,&b);
31             v[a].push_back(b);     //  a和 b 相连
32             v[b].push_back(a);  //  当然  b 也和 a 相连
33         }
34         DFS(m);   //  从第几个城市开始
35         for(i=1;i<=n;i++)
36             printf("%d ",city[i]);
37         printf("
");
38     }
39     return 0;
40 }
原文地址:https://www.cnblogs.com/A-FM/p/5272721.html