HDU---1213

简单并查集

  可以看做是最小生成树的前身 (krustral---先按权值排,然后用并查集) 

#include<iostream>
using namespace std;

int parent[1005];

int find(int a)
{
	if(parent[a]==a) return a;
	else
	{
		parent[a]=find(parent[a]);
		return parent[a];
	}
}

void UnionParent(int a,int b)
{
	int x=find(a);
	int y=find(b);
	parent[x]=y;
}

int main()
{
	int Tcase,m,n,x,y,i;
	cin>>Tcase;
	while(Tcase--)
	{
		int num=0;
		cin>>n>>m;
		for( i=1;i<=n;i++)
			parent[i]=i;
		for( i=1;i<=m;i++)
		{
			cin>>x>>y;
			UnionParent(x,y);
		}
		for(i=1;i<=n;i++)
		{
			if(i==parent[i]) num++;
		}
		cout<<num<<endl;
	}
	return 0;
}

 

posted @ 2014-11-21 11:40  zhoudan  阅读(112)  评论(0)    收藏  举报