并查集模板(不带权)
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
const int maxn=1100;
bool vis[maxn];
int fa[maxn];
int fi(int x){
return fa[x]==x?x:fa[x]=fi(fa[x]);
}
void Union(int x,int y){
int p1=fi(x),p2=fi(y);
if(p1==p2)return ;
fa[p1]=p2;
}
int main(){
ios::sync_with_stdio(false);
int T;cin>>T;
while(T--){
int n,m;cin>>n>>m;
fill(vis,vis+maxn,0);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=m;i++){
int x,y;cin>>x>>y;
Union(x,y);
}
int cnt=0;
for(int i=1;i<=n;i++){
int x=fi(i);
// cout<<x<<endl;
if(!vis[x]){
vis[x]=1;
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}