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 ",ans); 63 } 64 return 0; 65 }