nyoj20 吝啬的国度

 1 #include<queue>
 2 #include<vector>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<iostream>
 6 using namespace std;
 7 queue<int> q;
 8 int f[100010];
 9 vector<int> m[100010];//不能用二维数组,否则一直超内存,用vector定义二维数组虽然不超内存,但超时,因为它在定义是很耗时间 
10 int main()
11 {
12     int i,a,b,k,len,n,start,T;
13     scanf("%d",&T);
14     while(T--)
15     {
16         scanf("%d%d",&n,&start);
17         for(i=1;i<=n;++i)//记得清空啊! 
18             m[i].clear();
19         for(i=1;i<n;++i){
20             scanf("%d%d",&a,&b);
21             m[a].push_back(b);
22             m[b].push_back(a);
23         }
24         q.push(start);
25         f[start]=-1;
26         while(!q.empty()){//一般的bfs 
27             k=q.front();
28             q.pop();
29             len=m[k].size();
30             for(i=0;i<len;++i)
31                 if(!f[m[k][i]]){
32                     q.push(m[k][i]);
33                     f[m[k][i]]=k;
34                 }
35         }
36         for(i=1;i<n;++i)
37             printf("%d ",f[i]);
38         printf("%d\n",f[i]);
39         memset(f,0,sizeof(f));//注意清零 
40     }
41     //system("pause");
42     return 0;
43 }        
44         

posted on 2012-08-20 14:41  小花熊  阅读(641)  评论(0编辑  收藏  举报

导航