【題解】Codeforces EDU Course-2 Lesson-7-1 B. Disjoint Sets Union 2

【題目敘述】http://codeforces.com/edu/course/2/lesson/7/1/practice/contest/289390/problem/B

#include <iostream>
using namespace std;
 
int n, m, p[300005], sz[300005], mx[300005], mn[300005];
 
int pa(int x){
    if (x == p[x]) return x;
    return p[x] = pa(p[x]);
}
 
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++){
        p[i] = i;
        sz[i] = 1;
        mx[i] = i;
        mn[i] = i;
    }
    string s;
    for (int i = 0, u, v; i < m; i++){
        cin >> s;
        if (s == "union"){
            cin >> u >> v;
            u = pa(u);
            v = pa(v);
            if (u == v) continue;
            p[v] = u;
            sz[u] += sz[v];
            mx[u] = max(mx[u], mx[v]);
            mn[u] = min(mn[u], mn[v]);
        }
        else{
            cin >> u;
            u = pa(u);
            cout << mn[u] << " " << mx[u] << " " << sz[u] << "\n";
        }
    }
}
分享本文 Share with friends