pku 2524

经典的并查集运用,不解释

要提高代码的正确率呀!!!!!!!!!!!!!!!!!!!!!!!!

#include<stdio.h>
#define N 55000
int set[N];
int find(int a)
{
	int i,j,r;
	i=a;
	r=a;
	while(r!=set[r])
		r=set[r];
	while(i!=r)
	{
		j=set[i];
		set[i]=r;
		i=j;
	}
	return r;
}
void merge(int a,int b)
{
	int x,y;
	x=find(a);
	y=find(b);
	if(x!=y)
		set[x]=y;
}
int main()
{
	int i,j=0,n,m,x,y,count;
	while(scanf("%d%d",&n,&m)&&n&&m)
	{
		j++;
		for(i=1;i<=n;i++)
			set[i]=i;
		while(m--)
		{
			scanf("%d%d",&x,&y);
			merge(x,y);
		}
		count=0;
		for(i=1;i<=n;i++)
			if(set[i]==i)
				count++;
		printf("Case %d: %d\n",j,count);
	}
	return 0;
}

posted on 2010-03-24 22:53  草头菜  阅读(168)  评论(0编辑  收藏  举报

导航