为什么11pts?
查看原帖
为什么11pts?
517086
EthanC_楼主2022/4/16 14:00

rt,代码样例过了。

#include<iostream>
using namespace std;
int f[100001],dis[100001],s[100001];
int find(int x){
    if(f[x]==x)
        return x;
    dis[x]+=dis[f[x]];
    return f[x]=find(f[x]);
}
void un(int u,int v){
    u=find(u);
    v=find(v);
    if(u==v)return;
    f[u]=v;
    dis[u]+=s[v];
    s[v]+=s[u];
}
int main(){
    int T;
    cin>>T;
    for(int i=1;i<=30000;++i){
        f[i]=i;
        s[i]=1;
    }
    char c;
    int x,y;
    while(T--){
        cin>>c>>x>>y;
        if(c=='M')un(x,y);
        else{
            int u=find(x),v=find(y);
            if(u!=v)cout<<-1<<endl;
            else cout<<abs(dis[x]-dis[y])-1<<endl;
        }
    }       
}
2022/4/16 14:00
加载中...