求调
查看原帖
求调
1385996
ZSYhaouuan楼主2024/10/9 14:47
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,sum[30000+10],dis[30000+10],fa[30000+10];
ll fin(ll x){
	if(fa[x]==x){
		dis[x]=sum[x]-1;
		return x;
	}else{
		dis[x]=dis[fa[x]]-1;
		return fa[x]=fin(fa[x]);
	}
}
void add(ll x,ll y){
	ll t1=fin(x);
	ll t2=fin(y);
	fa[t1]=t2;
	sum[t2]+=sum[t1];
	sum[t1]=0;
	return;
}
int main(){
	cin.tie(0);
	cout.tie(0);
	for(ll i=1;i<=30000;i++) sum[i]=1;
	for(ll i=1;i<=30000;i++) fa[i]=i;
	cin>>n;
	for(int i=1;i<=n;i++){
		char ch;
		cin>>ch;
		if(ch=='M'){
			ll x,y;
			cin>>x>>y;
			add(y,x);
		}else if(ch=='C'){
			ll x;
			cin>>x;
			fin(x);
			cout<<dis[x]<<"\n";
		}
	}
	return 0;
}
2024/10/9 14:47
加载中...