我竟然被并查集卡住了。。。。
查看原帖
我竟然被并查集卡住了。。。。
137723
pencil楼主2021/6/24 11:30
#include<bits/stdc++.h>
using namespace std;
const int N=30100;
int f[N],d[N],size[N];
int find(int a){
	int j;
	if(f[a]!=a){
	
		j=find(f[a]);
		d[a]+=d[f[a]];
		f[a]=j;
	}
	return f[a];
}
int main() {
	char of;
	int n,i,a,b;
	cin>>n;
	for(i=1;i<=N;i++){
		f[i]=i;size[i]=1;
	}
	
	for(i=1;i<=n;i++){
		cin>>of>>a>>b;
		if(of=='M'){
			f[a]=b;size[a]+=size[b];d[a]+=d[b];
		}
		
		else
		{
			if(find(a)==find(b))
			cout<<abs(d[a]-d[b]-1);
			else 
			cout<<-1;
			cout<<endl;
		}
	}
return 0;
}
2021/6/24 11:30
加载中...