现在的位置: 首页 > 综合 > 正文

hdu’1213

2012年12月15日 ⁄ 综合 ⁄ 共 509字 ⁄ 字号 评论关闭

呵呵,基本的并查集,合并之后,判断集合的个数即可

#include<iostream>
#include<algorithm>
#define maxn 1010
using namespace std;
int f[maxn],n,m;
void init()
{
	for(int i=0;i<maxn;i++)
		f[i]=i;
}
int find(int x)
{
	if(x==f[x])
		return x;
	f[x]=find(f[x]);
	return f[x];
}//路径压缩
void Union(int x,int y)
{
	int a=find(x);
	int b=find(y);
	if(a==b) return ;
	f[b]=a;
}//合并
int main()
{
	int T,a,b;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d %d",&n,&m);
		init();
		for(int i=0;i<m;i++)
		{
			scanf("%d %d",&a,&b);
			Union(a,b);
		}
		int count=0;
		for(int i=1;i<=n;i++)
		{
			int t=find(i);
			if(t==i)
				count++;
		}
		printf("%d\n",count);
	}
	return 0;
}

 

抱歉!评论已关闭.