AcWing 837. 连通块中点的数量

#include <iostream>
using namespace std;
const int N = 100010;
int n, m;
int p[N], size[N];
int find(int x) {
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ ) {
        p[i] = i;
        size[i] = 1;
    }
    while (m -- ) {
        string op;
        int a,b;
        cin>>op;
        if(op=="C") {
            cin>>a>>b;
            if(find(a)==find(b)) continue;
            size[find(b)]+=size[find(a)];
            p[find(a)]=find(b);
        }else if(op=="Q1"){
            cin>>a>>b;
            if(find(a)==find(b)) puts("Yes");
            else puts("No");
        } else {
            cin>>a;
            cout<<size[find(a)]<<endl;
        }
    }
    return 0;
}

 

 

posted @ 2019-11-07 20:13  晴屿  阅读(108)  评论(0)    收藏  举报