参考代码

cookiebus 2024-02-04 18:49:13 13 返回题目

include <bits/stdc++.h>

using namespace std;
const int N = 3e5 + 10;
int f[N], d[N], sz[N], n, q, T, i, j;
char op;
int find(int x) {
    if (f[x] == x)
        return x;
    int rt = find(f[x]);
    // f[x] = rt
    d[x] = d[x] + d[f[x]];
    return f[x] = rt;
}
int main() {
    cin >> T;
    for (int i = 1; i <= 30000; ++i) {
        f[i] = i;
        d[i] = 0;
        sz[i] = 1;
    }
    while (T--) {
        cin >> op >> i >> j;
        int x = find(i);
        int y = find(j);
        if (op == 'M') {
            if (x == y)
                continue;
            f[x] = y;
            d[x] = sz[y];
            sz[y] += sz[x];
        } else {
            if (x != y) {
                cout << -1 << endl;
            } else {
                cout << abs(d[i] - d[j]) - 1 << endl;
            }
        }
    }

    return 0;
}
{{ vote && vote.total.up }}