认识的人坐一起,求需要几张桌子,简单的并查集。
#include<stdio.h>
int father[1010];
int find(int x)
{
if (father[x]!=x) father[x]=find(father[x]);
else
return father[x];
}
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
int x,y,i,n,m,a[1010]={0},b[1010]={0},c=0,flag,j;
scanf("%d%d",&n,&m);
for (i=1;i<=1009;i++) {a[i]=i;father[i]=i;}
for (i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if (find(x)!=find(y)) father[find(y)]=find(x);
}
for (i=1;i<=n;i++)
{
find(i);
if (father[i]==i) c++;
}
printf("%d\n",c);
}
}