#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
struct node
{
int rank;
int parent;
};
node t[10000005];
int ans;
int find(int x)
{
if(t[x].parent==x) return x;
else t[x].parent=find(t[x].parent);
return t[x].parent;
}
void un(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return;
if(t[x].rank>=t[y].rank)
{
t[x].rank+=t[y].rank;
if(t[x].rank>ans)ans=t[x].rank;
t[y].parent=x;
}
else
{
t[y].rank+=t[x].rank;
if(t[y].rank>ans)ans=t[y].rank;
t[x].parent=y;
}
return;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=1; i<=10000003; i++)
{
t[i].rank=1;
t[i].parent=i;
}
ans=1;
while(n--)
{
int x,y;
scanf("%d%d",&x,&y);
un(x,y);
}
printf("%d\n",ans);
}
return 0;
}//YSF友情赞助!!!!
hdu 1856并查集
最新推荐文章于 2019-03-15 17:56:18 发布