求助
查看原帖
求助
658620
Youth_Glory楼主2023/12/3 11:21
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll T,x,y,as,bs,fa[30005],size[30005],dis[30005];
char op;

ll find(ll s){
	if(fa[s]==s)return fa[s];
    ll fs=find(fa[s]);
    dis[s]+=dis[fa[s]];
    return fa[s]=fs;
}

void Union(ll a,ll b){
	as=find(a);bs=find(b);
	fa[as]=bs;
	dis[as]+=size[bs];
	size[bs]+=size[as];
}

int main()
{
	cin>>T;
	for(ll i=1;i<=30000;i++){
		fa[i]=i;
		size[i]=1;
		dis[i]=0;
	}
	while(T--){
		cin>>op>>x;
		if(op=='M'){
			cin>>y;
			Union(x,y);
		}
		if(op=='C')cout<<dis[x]<<"\n";
	}
	return 0;
}

基本上就是带权并查集模板的写法,看了好久都没看出哪里错了,交上去只对2个点

2023/12/3 11:21
加载中...