思路:并查集的基本应用
#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
int f[100008];
int find(int x)
{
return x==f[x]?x:f[x]=find(f[x]);
}
int init(int n)
{
for(int i=0;i<=n;i++)
f[i]=i;
return 1;
}
int merge(int x,int y)
{
int xx=find(x);
int yy=find(y);
if(xx!=yy)
f[xx]=yy;
}
int main()
{
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
int n,m;
while(t--)
{
scanf("%d%d",&n,&m);
init(n);
int x,y;
for(int i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
int num=0;
for(int i=1;i<=n;i++)
if(f[i]==i)
num++;
printf("%d\n",num);
}
}