题目链接:气点
#include<stdio.h> #define N 1005 int father[N],rank[N]; void Init() { for(int i=1;i<=N;i++) { father[i]=i; rank[i]=1; } } int Find_Father(int x) { if(x!=father[x]) father[x]=Find_Father(father[x]); return father[x]; } void Union(int a,int b) { int x=Find_Father(a); int y=Find_Father(b); if(x==y) return; if(rank[x]>rank[y]) { rank[x]+=rank[y]; father[y]=x; } else { rank[y]+=rank[x]; father[x]=y; } } int main() { int n; while(~scanf("%d",&n)) { Init(); int a,b; for(int i=1;i<=n;i++) { scanf("%d%d",&a,&b); Union(a,b); } int MAX=0; for(int i=1;i<=N;i++) if(rank[i]>MAX) MAX=rank[i]; printf("%d\n",MAX); } } /* 小小的模板 */ #define N ? int father[N],rank[N]; void Init() { for(int i=1;i<=N;i++) father[i]=i,rank[i]=1; } int Find_Father(x) { if(x!=father[x]) father[x]=Find_Father(father[x]); return father[x]; } void Union(int a,int b) { int x=Find_Father(a); int y=Find_Father(b); if(x==y) return; if(rank[x]>rank[y]) { father[y]=x; rank[x]+=rank[y]; } else { father[x]=y; rank[y]+=rank[x]; } }