求助
查看原帖
求助
469309
凤年楼主2023/1/9 19:41

rt,样例都过不去

#include <bits/stdc++.h>
#define N 30001
using namespace std;

int T, fa[N], d[N], siz[N];
char op;

int find(int x) {
    if(fa[x] == x) return x;
    int tmp = find(fa[x]);
    d[x] += d[fa[x]];
    return fa[x] = tmp;
}
void merge(int x,int y) {
    x = find(x), y = find(y);
    fa[x] = y, d[x] += d[y];
    siz[y] += siz[x];
    siz[x] = siz[y];
}

int main() {
    cin >> T;
    for(int i = 1;i <= 30000; ++i) fa[i] = i, siz[i] = 1, d[i] = 0;
    for(int i = 1,l, r;i <= T; ++i) {
        cin >> op >> l >> r;
        // printf("%c %d %d\n", op, l, r);
        if(op == 'M')
            merge(l, r);
        if(op == 'C')
            printf("%d\n", find(l)==find(r)?(abs(d[l] - d[r]) - 1):-1);
    }
    return 0;
}
2023/1/9 19:41
加载中...