题目链接:点击打开链接
题目大意:有n个人,各自管理不同的人,问有多少人管理k个人。
思路:先记录每个人的直接上级,然后模拟路径压缩的过程进行计数求和。
#include<stdio.h>
#include<string.h>
int p[105],sum[105];
void init()
{
int i;
for(i=0;i<105;i++)
{
p[i]=i;
sum[i]=1;
}
}
void findroot(int x)
{
int r=x;
while(r!=p[r])
r=p[r];
int i,j;
i=x;
while(i!=r)
{
j=p[i];
sum[p[i]]+=1;
// p[i]=r;
i=j; //模拟路径压缩过程,注意不要真的进行路径压缩。
}
}
int main()
{
int n,k,i,j,a,b;
while(scanf("%d%d",&n,&k)!=EOF)
{
init();
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
if(a!=b)
p[b]=a;
}
for(i=1;i<=n;i++)
{
findroot(i);
}
int ans=0;
for(i=1;i<=n;i++)
{
sum[i]--;
//printf("%d\n",sum[i]);
if(sum[i]==k)ans++;
}
printf("%d\n",ans);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/aaaaacmer/article/details/47616955