MLE32pts求助(玄关)
查看原帖
MLE32pts求助(玄关)
1199534
ycy1124楼主2025/1/9 14:43
#include<bits/stdc++.h>
using namespace std;
#define int short int
int f[100005],e[100005],n,q;
inline int find(int x){
    // cout<<x;
    if(f[x]!=x)return f[x]=find(f[x]);
    return x;
}
inline void hb(int u,int v){
    if(find(u)==find(v)){
        return;
    }
    if(e[find(u)]&&e[find(v)]){
        hb(e[find(u)],e[find(v)]);
    }
    else if(e[find(u)]){
        e[find(v)]=e[find(u)];
    }
    f[find(u)]=find(v);
}
signed main(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        f[i]=i;
    }
    for(int i=1;i<=q;i++){
        char op;
        int a,b;
        cin>>op>>a>>b;
        if(op=='R'){
            hb(a,b);
        }
        else if(op=='A'){
            if(e[find(a)]!=0){
                hb(e[find(a)],b);
            }
            else{
                e[find(a)]=find(b);
            }
            if(e[find(b)]!=0){
                hb(e[find(b)],a);
            }
            else{
                e[find(b)]=find(a);
            }
        }
        else{
            if(find(e[find(a)])==find(b)){
                cout<<"A\n";
            }
            else if(find(a)==find(b)){
                cout<<"R\n";
            }
            else{
                cout<<"?\n";
            }
        }
    }
    return 0;
}
2025/1/9 14:43
加载中...