带权并查集11分求助 谢谢!
查看原帖
带权并查集11分求助 谢谢!
726902
bcbgszyzh楼主2023/11/22 17:21

我的程序是:

#include<bits/stdc++.h>
using namespace std;
int size[1000010],f[1000010],d[1000010];
int find(int x){
	if(f[x]==x){
		return x;
	}
	int t1=f[x];
	int t2=find(t1);
	d[x]+=d[t1];
	return f[x]=t2;
}
int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=1000000;++i){
		f[i]=i;
		size[i]=1;
	}
	for(int i=1;i<=n;++i){
		char c;
		int x,y;
		cin>>c>>x>>y;
		int fx=find(x),fy=find(y);
		if(c=='M'){
			f[fx]=y;
			d[fx]=size[fy];
			size[fy]+=size[fx];
			size[fx]=0; 
		}else{
			if(fx!=fy){
				printf("-1\n");
			}else{
				printf("%d\n",abs(d[x]-d[y])-1);
			}
		}
	} 
	return 0;
}

使用编译选项 -O2 -std=C++14 -static 进行提交,获得 1111 分,请大佬帮忙,谢谢。

提交记录 RunId : R136338850 。

2023/11/22 17:21
加载中...