【并查集】【基本操作】

来自计蒜客的代码

特点:一棵树中的父亲全部都为根节点了,因为在get的过程中就把fa[i]=get(fa[i])了

#include <iostream>
using namespace std;
const int N = 110;
int fa[N], size[N]; int n, m; void init() { for(int i = 1; i <= n; i++) { fa[i] = i; size[i] = 1; } } int get(int x) { if(fa[x] == x) { return x; } return fa[x] = get(fa[x]); } void merge(int x, int y) { x = get(x); y = get(y); if(x != y) { fa[x] = y; size[y] += size[x]; } } int main() { cin >> n >> m; init(); for(int i = 0; i < m; i++) { int a, b; cin >> a >> b; merge(a, b); } for(int i = 1; i <= n; i++) { if(fa[i] == i) { cout << size[i] << endl; } } return 0; }
原文地址:https://www.cnblogs.com/bear-xin/p/14798961.html