分析:一个公司有n个人,给你n-1对关系a b,代表a管理b,问你有多少人管理k个人。遍历每个人管理的人的数量count,如果count==k,ans++;遍历的思想就是BFS。
# include <stdio.h>
# include <malloc.h>
# include <string.h>
typedef struct node
{
int num;
struct node *next;
}Node;
Node *T[105];
int main()
{
int i,n,x,k,a,b,ans,count,front,rear,q[105],visit[105];
Node *e;
while(scanf("%d%d",&n,&k)!=EOF)
{
for(i=1;i<=n;i++)
T[i]=NULL;
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
e=(Node *)malloc(sizeof(Node));
e->num=b;
e->next=T[a];
T[a]=e;
}
for(i=1,ans=0;i<=n;i++)
{
memset(visit,0,sizeof(visit));
front=rear=count=0;visit[i]=1;
for(e=T[i];e;e=e->next)
{
q[rear++]=e->num;
count++;visit[e->num]=1;
}
while(front<rear)
{
x=q[front++];
for(e=T[x];e;e=e->next)
if(!visit[e->num])
{
q[rear++]=e->num;
visit[e->num]=1;
count++;
}
}
if(count==k)
ans++;
}
printf("%d\n",ans);
}
return 0;
}