hdu 4707 仓鼠 记录深度 (BFS)
题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且图中没有回路,每个房间都是联通的,求仓鼠可能出现的房间的数量。
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
1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 #include <vector> 5 #include <queue> 6 7 using namespace std; 8 9 const int MAXN = 100010; 10 vector<int>vec[MAXN]; 11 int dep[MAXN]; 12 int pre[MAXN]; 13 void bfs(int s) 14 { 15 memset(dep,-1,sizeof(dep)); 16 dep[s] = 0; 17 queue<int>q; 18 q.push(s); 19 while(!q.empty()) 20 { 21 int u = q.front(); 22 q.pop(); 23 int sz = vec[u].size(); 24 for(int i = 0;i < sz;i++) 25 { 26 int v = vec[u][i]; 27 28 if(dep[v] != -1)continue; 29 dep[v] = dep[u] + 1; 30 pre[v] = u; 31 q.push(v); 32 } 33 } 34 } 35 int main() 36 { 37 //freopen("in.txt","r",stdin) ; 38 int T; 39 int n; 40 int D; 41 scanf("%d",&T); 42 while(T--) 43 { 44 scanf("%d%d",&n,&D); 45 int u,v; 46 for(int i = 0;i < n;i++) 47 vec[i].clear(); 48 for(int i = 1;i < n;i++) 49 { 50 scanf("%d%d",&u,&v); 51 vec[u].push_back(v); 52 vec[v].push_back(u); 53 } 54 55 bfs(0); 56 int ans = 0; 57 for(int i = 0;i < n;i++) 58 if(dep[i] > D) 59 ans++; 60 cout<<ans<<endl; 61 } 62 return 0; 63 }