其他分享
首页 > 其他分享> > P1536 村村通 并查集

P1536 村村通 并查集

作者:互联网

P1536 村村通
本题要求统计连通分块的个数,同一个连通分块可以用并查集进行处理

/*
村村通 
*/
#include<iostream>
using namespace std;
const int Max=1010;
int pre[Max];
int n,m,cnt;
void make()
{
	for (int i=1;i<=n;i++)
	{
		pre[i]=i;
	}
}
int find(int x)
{
	int r=x;
	while (r!=pre[r])
	{
		r=pre[r];
	}
	int i=x,j;
	while (r!=i)
	{
		j=pre[i];
		pre[i]=r;
		i=j;
	}
	return r;
}
void Union(int x,int y)
{
	int fx=find(x);
	int fy=find(y);
	if (fx!=fy)
	{
		cnt++;
		pre[fx]=fy;
	}
}
int main()
{
	cin>>n>>m;
	while (n!=0)
	{
		make();
		cnt=0;
		for (int i=1;i<=m;i++)
		{
			int x,y;
			cin>>x>>y;
			Union(x,y);
		}
		cout<<n-cnt-1<<endl;
		cin>>n;
		if (n==0) break;
		cin>>m;
	}
}

  

标签:P1536,cnt,int,Max,make,查集,村村通
来源: https://www.cnblogs.com/smghj/p/15984968.html