努力ing
你浪费的今天是昨天死去的人所渴望的明天!!!

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;
}

 

posted on 2013-05-29 21:24  努力ing  阅读(147)  评论(0)    收藏  举报