hdu 1232 畅通工程

点击打开链接

做的第一个并查集
#include"stdio.h"
int set[1005];
int find(int x)
{
	int r;
	r=x;
	while(set[r]!=r)
		r=set[r];
	return r;
}
void merge(int x,int y)
{
	int f1,f2;
	f1=find(x);
	f2=find(y);
	if(f1!=f2)
		set[f1]=f2;
}
int main()
{
	int n,m,x,y,i,count;
	while(scanf("%d",&n),n)
	{
		scanf("%d",&m);
		for(i=1;i<=n;i++)
			set[i]=i;
		for(i=0;i<m;i++)
		{
			scanf("%d%d",&x,&y);
			
			merge(x,y);
		}
		count=-1;
		for(i=1;i<=n;i++)
			if(set[i]==i)
				count++;
			printf("%d\n",count);
	}
	return 0;
}


posted on 2012-07-26 15:05  Slege  阅读(89)  评论(0编辑  收藏  举报

导航