http://acm.hdu.edu.cn/showproblem.php?pid=1856
并查集的题目
find()函数用到路径压缩,init()利用的是kruskal的思想
#include<iostream>
using namespace std;
#define MAX 10000010
struct node
{
int p;
int r;
};
node f[MAX];
int n,sum;
void init()
{
int i;
for(i=0;i<MAX;i++)
{
f[i].p=i;
f[i].r=1;
}
}
int find(int x)
{
int t=f[x].p;
if(t!=x)
{
f[x].p=find(t);
}
return f[x].p;
}
void Union(int a,int b)
{
int fa=find(a);
int fb=find(b);
if(fa!=fb)
{
f[fb].p=fa;
f[fa].r+=f[fb].r;
}
}
int count()
{
int cnt=0;
int i;
for(i=0;i<MAX;i++)
{
if(f[i].p==i)
{
if(f[i].r>cnt)
cnt=f[i].r;
}
}
return cnt;
}
int main()
{
int i,a,b,n;
while(cin>>n)
{
init();
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
Union(a,b);
}
cout<<count()<<endl;
}
return 0;
}
浙公网安备 33010602011771号