hdu 1856

http://acm.hdu.edu.cn/showproblem.php?pid=1856

还是并查集,不一样的地方就是找出最大的那个集合的元素个数。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 10000001
#define INF 0x3f3f3f3f
int p[M];
int t[M];
int find(int a)
{
    return p[a]==a?a:p[a]=find(p[a]);
}
void uni(int a,int b)
{
    int x=find(a),y=find(b);
    if(x!=y)
    {
        p[x] = y;
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)==1)
    {
        memset(t,0,sizeof(t));
        for(int i = 1;i <= 10000000;i++)
            p[i] = i;
        int max = -INF;
        for(int i = 0;i < n;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            if(a>max) max=a;
            if(b>max) max=b;
            uni(a,b);
        }
        int max1 = 1;
        for(int i = 1;i <= max;i++)
        {
            t[find(i)]++;
            if(t[find(i)]>max1)  //找出最大的集合
                max1=t[find(i)];
        }
        printf("%d\n",max1);
    }
    return 0;
}


你可能感兴趣的:(hdu 1856)