求大佬帮帮忙a 44分
查看原帖
求大佬帮帮忙a 44分
667250
Xiphi楼主2023/2/20 20:00

44分

不要问我为什么define int long long

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<string>
#include<cmath>
#include<cstring>
#include<set>
#include<map>
#define N 30005
#define int long long
using namespace std;
int fa[N],dis[N],size[N];
int find(int x){
	if(fa[x]==x) return x;
	int f=find(fa[x]);
	dis[x]+=dis[fa[x]];
	fa[x]=f;
	return fa[x];
}
void merge(int i,int j){
	int x=find(i),y=find(j);
	if(x==y){
		return ;
	}
	fa[x]=y,dis[x]+=size[y],size[y]+=size[x];
}
signed main(){
//	freopen("test.in","r",stdin);
//	freopen("test.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin>>T;
    for(int i=1;i<N;++i) fa[i]=i,size[i]=1;
    while(T--){
		char op;
		int i,j;
		cin>>op>>i>>j;
		if(op=='M'){merge(i,j);}
		else{
			int x=find(i),y=find(j);
			if(x!=y) puts("-1");
			else cout<<abs(dis[i]-dis[j])-1<<'\n';
		}
	}
	return 0;
}


2023/2/20 20:00
加载中...