基础的并查集。
#include<stdio.h>
#include<string.h>
int f[1005],t,n,m,x,y;
void init()
{
for(int i=1;i<=n;i++)
f[i]=i;
return;
}
int getf(int v)
{
if(f[v]==v)
return v;
f[v]=getf(f[v]);
return f[v];
}
void merge(int x,int y)
{
int t1,t2;
t1=getf(x);
t2=getf(y);
if(t1!=t2)
f[t2]=f[t1];
return;
}
int main()
{
int ans;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d%d",&n,&m);
init();//注意一定要读取了n再去初始化。
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
for(int i=1;i<=n;i++)
if(f[i]==i) ans++;
printf("%d\n",ans);
}
return 0;
}