求助!样例过不去!悬赏关注!!!
查看原帖
求助!样例过不去!悬赏关注!!!
494699
卷王慢即快楼主2023/1/21 17:33
#include <bits/stdc++.h>
using namespace std;
int n;
int f[30007];
int cnt[500007], num[500007];
inline int find(int x)
{
    if(f[x] == x) return x;
    int a = f[x], b = find(f[x]);
    f[x] = b; num[x] = num[x] + num[a];
    return b;
}
int main()
{
    cin >> n;
    for(int i = 1; i <= 30000; i++)
        f[i] = i, cnt[i] = 1;
    while(n--)
    {
        char ch; int x, y;
        cin >> ch >> x >> y;
        int u = find(x), v = find(y);
        if(ch == 'M')
        {
            f[u] = v;
            num[u] = cnt[v]; cnt[v] += cnt[u]; cnt[u] = 0;
        }
        else
        {
            if(u == v) cout << abs(num[u] - num[v]) - 1 << endl;
            else cout << -1 << endl;
        }
    }
    return 0;
}
2023/1/21 17:33
加载中...