...........
查看原帖
...........
906970
Jerry_Money楼主2024/8/3 16:00
#include<bits/stdc++.h>
using namespace std;
int t;
char opt;
int x,y;
int f[30005];
int siz[30005];
queue<int> l[30005];
int lie[30005];
int find(int x){
	return f[x]==x?x:f[x]=find(f[x]);
}
int main(){
	for(int i=1;i<=30000;i++){
		siz[i]=1;
		l[i].push(i);
		lie[i]=i;
	}
	cin>>t;
	while(t--){
		cin>>opt>>x>>y;
		if(opt=='M'){
			int li=lie[x];
			while(!l[li].empty()){
				int n=l[li].front();
				l[li].pop();
				lie[n]=lie[y];
				siz[n]=siz[l[lie[y]].back()]+1;
				l[lie[y]].push(n);
			}
		}
		else{
//			for(int i=1;i<=10;i++)cout<<lie[i]<<" ";
//			cout<<endl;
//			for(int i=1;i<=10;i++)cout<<siz[i]<<" ";
//			cout<<endl;
			if(lie[x]!=lie[y])cout<<-1<<endl;
			else cout<<abs(siz[x]-siz[y])-1<<endl;
		}
	}
}
2024/8/3 16:00
加载中...