HDU5326 work

来源:互联网 发布:淘宝代付一天多少次 编辑:程序博客网 时间:2024/06/03 15:45

Description

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.

Input

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

Output

For each test case, output the answer as described above.

Sample Input

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

Sample Output

2

Hint

题意

题解:

查找谁的子节点有k个

AC代码

#include<cstdio>#include<cstring>#include<stack>#include <set>#include <queue>#include <vector>#include<iostream>#include<algorithm>using namespace std;typedef long long LL;const int mod = 1e9+7;int par[110];int rnk[110];int n,k;void init(int n){    for (int i = 1;i <= n; ++i){        par[i] = i;        rnk[i] = 0;    }}int fd(int x){    if (x==par[x]) return par[x];    rnk[par[x]]++;    return fd(par[x]);}int main(){    while (scanf("%d%d",&n,&k)!=EOF){        init(n);        int x,y;        for (int i = 0;i < n-1; ++i){            scanf("%d%d",&x,&y);            if (x!=y) par[y] = x;        }        for (int i = 1;i <= n; ++i){            fd(i);        }        int sum = 0;        for (int i = 1;i <= n; ++i){            if (rnk[i]==k){                sum++;            }        }        printf("%d\n",sum);    }    return 0;}