您的位置:首页 > 其它

hdoj Work 5326 (并查集+技巧) 好题

2015-10-08 21:11 204 查看

Work

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1209    Accepted Submission(s): 737


[align=left]Problem Description[/align]



It’s an interesting experience to move from ICPC to work, end my college life and start a brand new journey in company.

As is known to all, every stuff in a company has a title, everyone except the boss has a direct leader, and all the relationship forms a tree. If A’s title is higher than B(A is the direct or indirect leader of B), we call it A manages B.

Now, give you the relation of a company, can you calculate how many people manage k people.

[align=left]Input[/align]
There are multiple test cases.

Each test case begins with two integers n and k, n indicates the number of stuff of the company.

Each of the following n-1 lines has two integers A and B, means A is the direct leader of B.

1 <= n <= 100 , 0 <= k < n

1 <= A, B <= n

[align=left]Output[/align]
For each test case, output the answer as described above.

[align=left]Sample Input[/align]

7 2
1 2
1 3
2 4
2 5
3 6
3 7

[align=left]Sample Output[/align]

#include<stdio.h>
#include<string.h>
int a[110];
int sum[110];
int find(int x)
{
int r=x;
while(r!=a[r])
r=a[r];
int i=x,j;
while(i!=r)
{
j=a[i];
sum[j]++;
i=j;
}
return r;
}
int main()
{
int n,m,i,j,x,y;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(sum,0,sizeof(sum));
int nn=n-1;
for(i=1;i<=n;i++)
a[i]=i;
while(nn--)
{
scanf("%d%d",&x,&y);
if(x!=y)
a[y]=x;
}
for(i=1;i<=n;i++)
find(i);
int cnt=0;
for(i=1;i<=n;i++)
{
if(sum[i]==m)
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: