PAT甲1107. Social Clusters (30)

#include <cstdio>
#include <cstdlib>
#include <math.h>
#include <algorithm>
using namespace std;

int father[1010],hobby[1010]={0},isf[1010]={0};
int N;

void init()
{
    for(int i=1;i<=N;i++)
    {
        father[i]=i;
    }
}

int findfather(int x)
{
    int a=x;
    while(x!=father[x])
    {
        x=father[x];
    }
    while(a!=father[a])
    {
        int z=a;
        a=father[a];
        father[z]=x;
    }
    return x;
}

void Union(int a,int b)
{
    int faA=findfather(a);
    int faB=findfather(b);
    if(faA!=faB)
    {
        father[faA]=faB;
    }
}

bool cmp(int a,int b)
{
    return a>b;
}

int main()
{

    scanf("%d",&N);
    init();
    for(int i=1;i<=N;i++)           
    {
        int m;
        scanf("%d",&m);
        getchar();
        for(int j=0;j<m;j++)
        {
            int k;
            scanf("%d",&k);
            if(hobby[k]>0)
            {
                Union(hobby[k],i);
            }
            else
            {
                hobby[k]=i;
            }
        }
    }
    for(int i=1;i<=N;i++)
    {
        isf[findfather(i)]++;
    }
    sort(isf,isf+N+1,cmp);
    int num=0;
    for(int i=0;i<N;i++)
    {
        if(isf[i]>0)num++;
    }
    printf("%d\n",num);
    for(int i=0;i<num;i++)
    {
        printf("%d",isf[i]);
        if(i!=num-1)
            printf(" ");
    }
    system("pause");
    printf("\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yhy489275918/article/details/80186034
今日推荐