HDU 5326 Work(并查集)(2015 Multi-University Training Contest 3)

</pre><pre name="code" class="cpp">//1:(并查集)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=205;
int p[maxm];
int num[maxm];
int n,k;
void Init()
{
    for(int i=1;i<=n;i++)
    {
        p[i]=i;
        num[i]=0;
    }
    return;
}
void find(int x)
{
    if(p[x]!=x)
    {
        num[p[x]]++;
        find(p[x]);
        return;
    }
}
int main()
{
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        Init();
        int cnt=0;
        for(int i=1; i<=n-1; i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            p[y]=x;
        }
        for(int i=1;i<=n;i++)
        {
            find(i);
        }
        for(int i=1; i<=n; i++)
        {
           if(num[i]==k)
           {
               cnt++;
           }
        }
        printf("%d\n",cnt);
    }
    return 0;
}
//2:(看网上代码,不晓得这是啥方法,好理解)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=105;
int vis[maxm][maxm];
int num[maxm];
int main()
{
    int n,r;
    while(scanf("%d%d",&n,&r)!=EOF)
    {
        int x,y;
        int cnt=0;
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=1;i<=n-1;i++)
        {
            scanf("%d%d",&x,&y);
            vis[x][y]=1;
            num[x]++;
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(vis[i][j])
                {
                    for(int k=1;k<=n;k++)
                    {
                        if(vis[j][k])
                        {
                            vis[i][k]=1;
                        }
                    }
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(vis[i][j])
                {
                    num[i]+=num[j];
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(num[i]==r)
            {
                cnt++;
            }
        }
        printf("%d\n",cnt);
    }
    return 0;
}


你可能感兴趣的:(HDU 5326 Work(并查集)(2015 Multi-University Training Contest 3))