并查集基础题,适合初学者练习。
#include <bits/stdc++.h>
using namespace std;
int fa[1010], ans;
bool vis[1010];
int find(int x){
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
int main(){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i ++) fa[i] = i;
for(int i = 1; i <= m; i ++){
int a, b;
scanf("%d%d", &a, &b);
if(find(a)!=find(b)) fa[fa[a]] = b;
}
for(int i = 1; i <= n; i ++)
if(!vis[find(i)]) vis[fa[i]] = 1, ans ++;
printf("%d", ans-1);
return 0;
}