hdoj 4707 BFS
1 #include <iostream> 2 #include <vector> 3 #include <queue> 4 #include <string.h> 5 #include <stdlib.h> 6 #include <stdio.h> 7 using namespace std; 8 const int MAXN=1000010; 9 vector<int> vec[MAXN]; 10 int dep[MAXN]; 11 //int pre[MAXN]; 12 void bfs(int s) 13 { 14 memset(dep,-1,sizeof(dep)); 15 dep[s]=0; 16 queue<int> q; 17 q.push(s); 18 while(!q.empty()){ 19 int u = q.front(); 20 q.pop(); 21 int sz = vec[u].size(); 22 for(int i=0;i<sz;i++){ 23 int v = vec[u][i]; 24 if(dep[v]!=-1) continue; 25 dep[v]=dep[u]+1; 26 // pre[v]=u; 27 q.push(v); 28 } 29 } 30 31 } 32 void dfs(int x) 33 { 34 35 for(unsigned i=0;i<vec[x].size();i++) 36 { 37 dep[vec[x][i]]=dep[x]+1; 38 dfs(vec[x][i]); 39 } 40 return; 41 } 42 43 int main() 44 { 45 int T; 46 int n; 47 int D; 48 scanf("%d",&T); 49 while(T--) 50 { 51 scanf("%d%d",&n,&D); 52 int u,v; 53 for(int i=0;i<n;i++){ 54 vec[i].clear(); 55 } 56 57 for(int i=1;i<n;i++){ 58 scanf("%d%d",&u,&v); 59 vec[u].push_back(v); 60 vec[v].push_back(u); 61 } 62 bfs(0); 63 int ans=0; 64 for(int i=0;i<n;i++){ 65 if(dep[i] > D) 66 ans++; 67 } 68 cout<<ans<<endl; 69 70 71 } 72 73 return 0; 74 }