hdu 1856

来源:互联网 发布:最好的游戏优化软件 编辑:程序博客网 时间:2024/05/17 04:01

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 0x3f3f3f3fint 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;}


0 0