大神求助,哪里出了问题?
查看原帖
大神求助,哪里出了问题?
488310
wisdua楼主2022/4/20 22:01

以下是我的神奇代码。

#include<bits/stdc++.h>
using namespace std;
const int maxn=30001;
int fa[maxn],siz[maxn],len[maxn];
pair<int,int> find(int x){
	if(fa[x]==x){
		return {x,0};
	}
	pair<int,int>temp=find(fa[x]);
	return {fa[x]=temp.first,len[x]=temp.second+len[x]};
}
int gardpa(int x){
	return find(x).first;
}
void join(int x,int y){
	int fx=gardpa(x),fy=gardpa(y);
	fa[fx]=fy;
	len[fx]=siz[fy];
	siz[fy]+=len[fx];
}
int search(int x,int y){
	if(gardpa(x)==gardpa(y)){
		return abs(siz[x]-siz[y]);
	} 
	return -1;
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	for(int i=1;i<=30000;i++){
		fa[i]=i;
		siz[i]=1;
		len[i]=0;
	}
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		char opt;
		cin>>opt;
		if(opt=='M'){
			int x,y;
			cin>>x>>y;
			join(x,y);
		}
		else{
			int x,y;
			cin>>x>>y;
			cout<<search(x,y)<<endl;
		}
	}
	return 0;
}

样例过了,一提交,满屏红。 哪位dalao能帮帮我。

2022/4/20 22:01
加载中...