并查集基础题,适合初学者练习。
#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;
}

本文介绍了一道适合初学者的并查集基础题目。通过示例代码详细讲解了并查集的基本操作,如查找与合并等,并展示了如何解决实际问题。
1100

被折叠的 条评论
为什么被折叠?



