hdu 1213 How Many Tables

点击打开链接

并查集
#include"stdio.h"
int set[1005];
int find(int x)
{
	int r;
	r=x;
	while(set[r]!=r)
		r=set[r];
	return r;
}
void merge(int x,int y)
{
	int f1,f2;
	f1=find(x);
	f2=find(y);
	if(f1!=f2)
		set[f1]=f2;
}
int main()
{
	int t,n,m,x,y,i,count;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		for(i=1;i<=n;i++)
			set[i]=i;
		for(i=0;i<m;i++)
		{
			scanf("%d%d",&x,&y);
			merge(x,y);
		}
		count=0;
		for(i=1;i<=n;i++)
			if(set[i]==i)
				count++;
			printf("%d\n",count);
	}
	return 0;
}


原文地址:https://www.cnblogs.com/yyf573462811/p/6365378.html