#include<stdio.h> #include<string.h> #include<iostream> using namespace std; struct node { int to,next; }A[100010]; int list[100010]; int tot,n,d; int deal(int a,int b) { A[++tot].to=b; A[tot].next=list[a]; list[a]=tot; return 0; } int dfs(int a,int t) { if(t>=d) return 1; int i,sum=1; for(i=list[a];i>=0;i=A[i].next) { int k=A[i].to; sum+=dfs(k,t+1); } return sum; } int main() { int T,i,j,a,b; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&d); tot=1; memset(list,-1,sizeof(list)); for(i=1;i<n;i++) { scanf("%d%d",&a,&b); deal(a,b); } int k=dfs(0,0); printf("%d\n",n-k); } return 0; }
原文:http://blog.csdn.net/zxf654073270/article/details/42803755