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 }
View Code

 

posted @ 2015-05-15 22:56  __Meng  阅读(194)  评论(0编辑  收藏  举报