hdu 1232 畅通工程(并查集 基础)

终于有时间搞算法了,估计时间又不长,(~ o ~)~zZ,决定以后不管学习任务多重都要坚持ac,(=@__@=)努力!!!

#include <iostream>
#include<cstdio>
#include <queue>
#include<string.h>
using namespace std;
int pre[105];
int ufs(int p)
{
	int t1=p,t2;
	while(p!=pre[p])
		p=pre[p];
	while(t1!=p)
	{
		t2=pre[t1];
		pre[t1]=p;
		t1=t2;
	}
	return p;
}
int main()
{
	int N,M,x,y,p1,p2;
	while(scanf("%d%d",&N,&M)&&N)
	{
		int sum=N-1;
		for(int i=1;i<=N;i++)
				pre[i]=i;
		while(M--)
		{
			scanf("%d%d",&x,&y);
			p1=ufs(x);
			p2=ufs(y);
			if(p1!=p2)
			{
				sum--;
				pre[p1]=p2;
			}
		}
		printf("%d\n",sum);
	}
}



posted on 2011-07-29 10:34  ljfbest  阅读(70)  评论(0)    收藏  举报

导航