标签:
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2052 Accepted Submission(s): 1007
Sample Input
1
10 2
0 1
0 2
0 3
1 4
1 5
2 6
3 7
4 8
6 9
Sample Output
2
给定一个树,根节点为0,找到距离根节点大于d的节点的个数。bfs搜索
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <queue> 5 #include <vector> 6 using namespace std; 7 int n,d; 8 vector<int > map[100000+10]; 9 int vis[100000+10]; 10 struct node 11 { 12 int x; 13 int t; 14 }tem,top; 15 vector<int>::iterator p; 16 void bfs() 17 { 18 int i,j; 19 queue <node> s; 20 top.x=0,top.t=0; 21 s.push(top); 22 while(!s.empty()) 23 { 24 top=s.front(); 25 s.pop(); 26 if(top.t==d) 27 continue; 28 vis[top.x]=1; 29 for(p=map[top.x].begin();p!=map[top.x].end();p++) 30 { 31 if(!vis[*p]) 32 { 33 tem.x=*p; 34 tem.t=top.t+1; 35 vis[*p]=1; 36 s.push(tem); 37 } 38 } 39 } 40 } 41 int main() 42 { 43 int T; 44 int s,t; 45 int ans; 46 freopen("in.txt","r",stdin); 47 scanf("%d",&T); 48 while(T--) 49 { 50 scanf("%d%d",&n,&d); 51 memset(vis,0,sizeof(vis)); 52 for(int i=0;i<n;i++) map[i].clear(); 53 for(int i=0;i<n-1;i++) 54 { 55 scanf("%d%d",&s,&t); 56 map[s].push_back(t); 57 map[t].push_back(s); 58 } 59 ans=0; 60 bfs(); 61 for(int i=0;i<n;i++) 62 { 63 if(!vis[i]) 64 { 65 ans++; 66 //cout<<i<<" "; 67 } 68 } 69 printf("%d\n",ans); 70 } 71 }
标签:
原文地址:http://www.cnblogs.com/a1225234/p/5036700.html