http://acm.hust.edu.cn/vjudge/contest/view.action?cid=39621#overview
跟着九野巨巨刷了
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <queue>
#include <map>
using namespace std;
#define INF 1e9
#define maxn 1005
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define mset(x) memset(x,0,sizeof(x))
int pa[maxn], kase, n, m, a, b;
void init(){
memset(pa, -1, sizeof(pa));
}
int find(int x){
if(pa[x]==-1)
return x;
return x = find(pa[x]);
}
void uni(int x, int y){
x = find(x);
y = find(y);
if(x!=y){
pa[y] = x;
}
}
int main(){
// freopen("a.txt","r",stdin);
// freopen(".out","w",stdout);
cin>>kase;
while(cin>>n>>m){
init();
while(m--){
cin>>a>>b;
uni(a, b);
}
int cnt=0;
rep(i,1,n){
if(pa[i]==-1)
cnt++;
}
printf("%d\n", cnt);
}
return 0;
}