11分求调
查看原帖
11分求调
1071426
shx2011楼主2024/8/30 21:15

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=3e4+10;
int fa[N],siz[N],num[N];
int n,m;

int find(int x){
	if(fa[x]==x) return x;
	num[x]=num[x]+num[fa[x]];
	return fa[x]=find(fa[x]);
}

void merge(int x,int y){
	int fx=find(x);
	int fy=find(y);
	fa[fx]=fy;
	num[fx]=siz[fy];
	siz[fy]+=siz[fx];
	return;
}
int main(){
	cin>>m;
	
	for(int i=1;i<=N;i++){
		fa[i]=i;
		siz[i]=1;
	}
	
	char q;
	int x,y;
	for(int i=1;i<=m;i++){
		cin>>q>>x>>y;
		if(q=='M'){ 
			merge(x,y);
		}else{
			if(find(x)!=find(y)) {
				cout<<-1<<endl;
			}else{
		 		cout<<abs(siz[x]-siz[y])-1;	
			}
		}
	}
	
//	for(int i=1;i<=5;i++){
//		cout<<fa[i];
//	} 
	return 0;
}
2024/8/30 21:15
加载中...