http://acm.hdu.edu.cn/showproblem.php?pid=1856
#include<stdio.h> #define MAX 10000000 int fa[MAX],num[MAX]; int find(int x) { return fa[x]==x?x:fa[x]=find(fa[x]); } void merge(int a,int b) { int x,y; x=find(a); y=find(b); if(x!=y) fa[x]=y; } int count() { int i,max=0; for(i=1;i<=MAX;i++) num[i]=0; for(i=1;i<=MAX;i++) num[find(i)]++ ; for(i=1;i<=MAX;i++) if(num[i]>max) max=num[i] ; return max ; } int main(void) { int n,a,b,i; while(scanf("%d",&n)!=EOF) { for(i=1;i<=MAX;i++) fa[i]=i; for(i=1;i<=n;i++) { scanf("%d%d",&a,&b); merge(a,b); } printf("%d\n",count()); } return 0; }