怀旧书本
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int p[N], Size[N];
int n, m;
char op[5];
// 路径压缩
int find(int x) {
    if (p[x]) return p[x] = find(p[x]);
    return x;
};
void _union(int x, int y) {
    int xp = find(x), yp = find(y);
    if (xp == yp) return;
    p[xp] = yp;
    Size[yp] += Size[xp];
};
int main() {
    cin >> n >> m;
    memset(p, 0, sizeof p);
    for (int i = 1; i <= n; ++i) {
        Size[i] = 1;
    }
    int x, y;
    while(m--) {
        cin >> op;
        if (op[0] == 'C') {
            cin >> x >> y;
            _union(x, y);
        } else if (op[1] == '1') {
            cin >> x >> y;
            if (find(x) == find(y)) {
                cout <<"Yes" << endl;
            } else {
                cout <<"No" << endl;
            }
        } else {
            cin >> x;
            cout << Size[find(x)] << endl;
        }
    }
    return 0;
}
本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,说不定哪天故事又继续更新了呢。
本文地址:https://qoogle.top/the-number-of-nodes-in-the-set-union-find/
最后修改日期:2020年5月23日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。