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         

你可能感兴趣的:(OJ)