#include<cstdio> #include<iostream> using namespace std; #define M 1000001 int num[M],rote[M],Maxstep; void init(int Max){ for(int i=0;i<=Max;i++) num[i]=1,rote[i]=i; Maxstep=0; } int Find(int p){ int q=p; while(rote[p]!=p) p=rote[p]; while(rote[q]!=q) q=rote[q],rote[q]=p; return p; } void Union(int a,int b){ a=Find(a),b=Find(b); if(num[a]>=num[b]){ num[a]+=num[b]; rote[b]=rote[a]; Maxstep=Maxstep>num[a]?Maxstep:num[a]; } else{ num[b]+=num[a]; rote[a]=rote[b]; Maxstep=Maxstep>num[b]?Maxstep:num[b]; } } int main(){ int i,j,n,Max=M-1,a,b; init(Max); while(scanf("%d",&n)!=EOF){ Max=0; while(n--){ scanf("%d %d",&a,&b); Max=Max>a?Max:a; Max=Max>b?Max:b; int x=Find(a); int y=Find(b); if(x!=y) Union(a,b); } Maxstep?cout<<Maxstep<<endl:cout<<"1"<<endl; init(Max); } return 0; } [