求助!!!!!!!!!!
查看原帖
求助!!!!!!!!!!
295543
beauty_son_whm楼主2021/7/12 17:27
#include<bits/stdc++.h>
using namespace std;
int n,t;
int fa[300000],d[300000],s[300000],sum[300000];
int get(int x){
	if(x==fa[x]) return x;
	else{
		return fa[x]=get(fa[x]);
	}
}
void merge(int x,int y){
	x=get(x),y=get(y);
	fa[x]=y;s[y]+=s[x];
	sum[y]+=sum[x];
}
void remove(int x,int y){
	s[get(x)]--;sum[get(x)]-=x;
	fa[x]=get(y);
	s[get(y)]++;sum[get(y)]+=x;
}
int main(){
	cin>>n>>t;
	for(int i=1;i<=n;i++)fa[i]=i,s[i]=1,sum[i]=i;
	while(t--){
		int a;
		cin>>a;
		if(a==1){
			int x,y;
			cin>>x>>y;
			if(get(x)==get(y)) continue;
			merge(x,y);
			get(x),get(y);
		}
		if(a==2){
			int x,y;
			cin>>x>>y;
			if(get(x)==get(y)) continue;
			remove(x,y);
		}
		if(a==3){
			int x;
			cin>>x;
			cout<<s[get(x)]<<" "<<sum[get(x)]<<endl;
		}
	}
	return 0;
}

样例可过,但是WA

2021/7/12 17:27
加载中...