Think:
1知识点:并查集
2反思:并查集初始化操作应注意已知n进而进行初始化
以下为Accepted代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e3 + 4;
int n, m, f[N];
void Init();
int get_f(int x);
void Merge(int u, int v);
int main(){
int T, i, u, v, ans;
scanf("%d", &T);
while(T--){
scanf("%d %d", &n, &m);
ans = 0;
Init();
while(m--){
scanf("%d %d", &u, &v);
Merge(u, v);
}
for(i = 1; i <= n; i++){
if(f[i] == i)
ans++;
}
printf("%d\n", ans);
}
return 0;
}
void Init(){
for(int i = 1; i <= n; i++)
f[i] = i;
}
void Merge(int u, int v){
int t1 = get_f(u);
int t2 = get_f(v);
f[t2] = t1;
}
int get_f(int x){
if(f[x] == x)
return f[x];
else {
f[x] = get_f(f[x]);
return f[x];
}
}