HDU1213_How Many Tables

题目大意:         让你输入n,m,n代表有n个人,m代表有m组表示其关系的数据,最后要求输出,能够把这n个点分为几组,注意,如果a与b有关系,b与c有关系,那么a与c也有关系。 解题思路:         直接用并查集查找就行了,查找分为几组。 代码:
#include
using namespace std;
const int MAX=1005;

int pre[MAX];
int find(int x)
{
	int r=x;
	while(pre[r]!=r)
	{
		r=pre[r];
	}
	//r此刻为根节点
	while(pre[x]!=r)//x值随便改变,优化,一个一个拿去接根节点
	{
		int j=pre[x];
		pre[x]=r;
		x=j;
	}
	return r;//返回根节点
}
void init()
{
	for(int i=1;i>cas;
	while(cas--)
	{
		cin>>n>>m;
		init();
		for(i=0;i>a>>b;
			int f1=find(a);
			int f2=find(b);
			if(f1!=f2)
				pre[f2]=f1;
		}
		int count=0;
		for(j=1;j<=n;j++)
		{
			if(pre[j]==j)
				count++;
		}
		cout<

 
原文地址:https://www.cnblogs.com/cchun/p/2520178.html