如果你只输出-1
查看原帖
如果你只输出-1
946590
Happy_sheep楼主2024/6/2 14:39

检查一下你是不是输出了fx到fy的距离。

错误示范:

#include<bits/stdc++.h>
using namespace std;
int fa[30005],dis[30005],sum[30005],_,x,y; 
int find(int x){
	if(fa[x]==x) return x;
	int fx=find(fa[x]);
	dis[x]+=dis[fa[x]];
	return fa[x]=fx;
} 
int main(){
	cin>>_;
	for(int i=1; i<=30000; i++){
		fa[i]=i;
		dis[i]=0;
		sum[i]=1;
	}
	while(_--){
		char op;
		cin>>op>>x>>y;
		int fx=find(x),fy=find(y);
		if(op=='M'){
			if(fx==fy) continue;
			dis[fx]+=sum[fy];
			fa[fx]=fy;
			sum[fy]+=sum[fx];
			sum[fx]=0;
		}
		else{
			if(fx!=fy) cout<<"-1\n";
			else cout<<abs(dis[fx]-dis[fy])-1<<'\n';
          		//问题就在这里
		}
	}
	return 0;
}

2024/6/2 14:39
加载中...