Pet(dfs)

http://acm.hdu.edu.cn/showproblem.php?pid=4707

题意:判断距离大于D的点有多少个。

思路: 邻接表建图,dfs每一个点,记录步数。

 1 #include <stdio.h>
 2 #include <string.h>
 3 const int N=200002;
 4 int vis[N],dis[N],head[N],cnt,step;
 5 struct node
 6 {
 7     int u;
 8     int v;
 9     int next;
10 } edge[N];
11 void add(int u,int v)
12 {
13     edge[cnt].u = u;
14     edge[cnt].v = v;
15     edge[cnt].next = head[u];
16     head[u] = cnt++;
17 };
18 void dfs(int u,int step)
19 {
20     if (vis[u])
21         return ;
22     dis[u] = step;
23     vis[u] = 1;
24     for (int j = head[u]; j != -1; j = edge[j].next)
25     {
26         int v = edge[j].v;
27         if (!vis[v])
28         {
29             dfs(v,step+1);
30         }
31     }
32     return ;
33 }
34 void init()
35 {
36     memset(head,-1,sizeof(head));
37     memset(vis,0,sizeof(vis));
38     cnt = 0;
39 
40 }
41 int main()
42 {
43     int t,n,d,u,v;
44     scanf("%d",&t);
45     while(t--)
46     {
47         scanf("%d%d",&n,&d);
48         init();
49         for (int i = 1; i < n; i ++)
50         {
51             scanf("%d%d",&u,&v);
52             add(u,v);
53             add(v,u);
54         }
55         dfs(0,0);
56         int ans = 0;
57         for (int i = 0; i < n; i ++)
58         {
59             if (dis[i] > d)
60                 ans++;
61         }
62         printf("%d\n",ans);
63     }
64     return 0;
65 }
View Code

 

posted @ 2013-09-13 13:57  N_ll  阅读(159)  评论(0)    收藏  举报