并查集

阅读时长: 1 分钟 117 字

使用路径压缩维护集合。输入 n、m,再输入 m 对合并节点,最后输出每个节点的代表元。

#include <bits/stdc++.h>
using namespace std;

vector<int> fa;
int find(int x) { return fa[x]==x ? x : fa[x]=find(fa[x]); }
int main() {
    int n,m; cin >> n >> m;
    fa.resize(n+1); iota(fa.begin(),fa.end(),0);
    while(m--) { int child,parent; cin >> child >> parent; fa[find(child)]=find(parent); }
    for(int i=1;i<=n;++i) cout << find(i) << (i==n?'\n':' ');
}
本网站已运行: 计算中...
备案 赣公网安备36072502000191 | 赣ICP备2024040374号
使用 Hugo 构建 · 主题 Stack 由 Jimmy 设计