HDU 1856 More is better 并查集

来源:互联网 发布:北京师范学校网络教育 编辑:程序博客网 时间:2024/05/06 06:48

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1856


给你n个关系

求最大连通图的节点个数


代码如下:

#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <vector>#include <list>#include <deque>#include <queue>#include <iterator>#include <stack>#include <map>#include <set>#include <algorithm>#include <cctype>using namespace std;const int N=10000001;typedef long long LL;int parent[N],xh[N];int n;void UFset(){    for(int i=0;i<N;i++)    {        parent[i]=i;        xh[i]=1;    }}int find(int x){    int r=x;    while(r!=parent[r])        r=parent[r];    while(parent[x]!=r)    {        parent[x]=r;        x=parent[x];    }    return r;}void insert(int x,int y){    x=find(x);    y=find(y);    if(x==y)        return ;    xh[x]+=xh[y];//这个地方要和下面的对应    parent[y]=x;}int main(){    int i,j,a,b;    while(cin>>n)    {        UFset();        int m=0;        while(n--)        {            scanf("%d%d",&a,&b);            m=max(m,a);            m=max(m,b);            insert(a,b);        }        int t=0;        for(i=0;i<=m;i++)            if(t<xh[i])                t=xh[i];        printf("%d\n",t);    }    return 0;}