HDU-1232 畅通工程

题目链接:HDU-1232 畅通工程
HDU-1232 畅通工程_第1张图片
HDU-1232 畅通工程_第2张图片

#include
#include
#include

using namespace std;
const int N = 1005;
int father[N];

int find(int x)
{
	if(father[x]!=x)
		father[x] = find(father[x]);
	return father[x];
}

void Union(int x,int y)
{
	x = find(x);
	y = find(y);
	if(x!=y)
		father[x] = y;
}

int main()
{
	int n,m;
	int x,y;
	while(cin>>n>>m&&n)
	{
		for(int i=1;i<=n;i++)	//结点初始化 
			father[i] = i;
			
		while(m--) //合并每一条道路 
		{
			cin>>x>>y;
			Union(x,y);
		}
		
		int cnt = -1;
		for(int i=1;i<=n;i++)	//统计未连接的道路 
			if(father[i]==i)
				cnt++;
				
		cout<<cnt<<endl;
	}
	
	return 0;
} 

你可能感兴趣的:(并查集)