首页 > 其他 > 详细

并查集之求集合的元素的最大个数----hdu1856 more is better

时间:2015-10-29 20:09:03      阅读:330      评论:0      收藏:0      [点我收藏+]
#include<cstdio>
#define N 10000005
int pre[N];
int num[N];
void init()
{
    for(int i=1; i<=N; i++)
    {
        num[i]=1;
        pre[i]=i;
    }
}
int find(int x)
{
    int r=x;
    while(r!=pre[r])
        r=pre[r];
    int i=x,j;
    while(i!=r)
    {
        j=pre[i];
        pre[i]=r;
        i=j;
    }
    return r;
}
void merge(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    if(fx!=fy)
    {
        num[fy]+=num[fx];
        pre[fx]=fy;
    }
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if(n==0)
        {
            printf("1\n");
            continue;
        }
        init();
        int max=0;
        while(n--)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            if(x>max)  max=x;
            if(y>max)  max=y;
            merge(x,y);
        }
        int maxn=0;
        for(int i=1; i<=max; i++)
            if(num[i]>maxn)
                maxn=num[i];
        printf("%d\n",maxn);
    }
    return 0;
}

上面是AC代码,核心思想就是求出集合元素个数的最大值,然而我们知道,寻找每一位元素的时候通过merge[]集合寻找到根节点是否相同,如果不相同,则将pre【】集合的根节点更新,如此我们可以在更新的时候进行计数,num[]就是一个计数集合,
我们只需要寻找最大值就可以了。。。欢迎提问,别忘了关注呦!!!

并查集之求集合的元素的最大个数----hdu1856 more is better

原文:http://www.cnblogs.com/calmwithdream/p/4921328.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!