求助!
查看原帖
求助!
1141675
_liu114514_楼主2025/8/5 15:34
#include<bits/stdc++.h>
using namespace std;
int n,m,f[214514],sz[214514],val[214514];
int find(int x){
    if(f[x]==x)return x;
    return f[x]=find(f[x]);
}
int main(){
    while(cin>>n>>m){
        for(int i=1;i<=n;i++)f[i]=i+n;
        for(int i=n+1;i<=2*n;i++)
            f[i]=i,sz[i]=1,val[i]=i-n;
        for(int i=1;i<=m;i++){
            int k,p,q;
            cin>>k;
            if(k==1){
                cin>>p>>q;
                p=find(p),q=find(q);
                if(p==q)continue;
                f[p]=q;
                sz[q]+=sz[p];
                val[q]+=val[p];
            }else if(k==2){
                cin>>p>>q;
                int pp=find(p),qq=find(q);
                if(pp==qq)continue;
                f[p]=qq;
                sz[pp]--,sz[qq]++;
                val[pp]-=p,val[qq]+=q;
            }else{
                cin>>p;
                cout<<sz[find(p)]<<" "<<val[find(p)]<<"\n";
            }
        }
    }
    return 0;
}
2025/8/5 15:34
加载中...