hdu5326 Work

来源:互联网 发布:萧亚轩事业 知乎 编辑:程序博客网 时间:2024/06/05 16:57

题目链接:点击打开链接

题目大意:有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;}


0 0
原创粉丝点击