#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define siz 1000005
int node,edge;
int rank[siz],p[siz];
void Make_set(int n){
p[n]=n;
rank[n]=0;
}
int Find_set(int x){
if(x!=p[x]) p[x]=Find_set(p[x]);
return p[x];
}
void Union(int x, int y){
if(rank[x]<rank[y]){
p[x]=y;
rank[y]+=rank[x];
}
else{
p[y]=x;
rank[x]+=rank[y];
}
}
int main()
{
int u,v,x,y;
//freopen("input.txt","r",stdin);
while(scanf("%d%d",&node,&edge)==2){
if(node==0&&edge==0) break;
for(int i=0;i<=node;i++)
Make_set(i);
for(int i=0;i<edge;i++){
scanf("%d%d",&u,&v);
if(rank[u]==0) rank[u]=1;
if(rank[v]==0) rank[v]=1;
if(Find_set(u)!=Find_set(v))
Union(Find_set(u),Find_set(v));
}
int mx=0;
for(int i=1;i<=node;i++){
mx=max(mx,rank[i]);
}
printf("%d\n",mx);
}
return 0;
}
Thursday, November 1, 2012
Finding The Largest Group Size By Disjoint Set
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment