- 题解
银河英雄传说
- @ 2026-8-3 10:58:40
#include <bits/stdc++.h>
using namespace std;
int fa[4000005],sz[4000005],dist[4000005];int n,m,t;
int find(int x){
if (fa[x]==x) return x;
int f=fa[x];
fa[x]=find(fa[x]);
dist[x]+=dist[f];
return fa[x];
}
void mrge(int x, int y) {
int rx=find(x),ry=find(y);
if (rx==ry) return;
fa[rx]=ry;
dist[rx]=sz[ry];
sz[ry]+=sz[rx];
}//pro max
int main(){
cin>>t;
for(int i=1;i<=t;i++){
fa[i]=i;
dist[i]=0;
sz[i]=1;
}
for(int i=1;i<=t;i++){
char s;
int a,b;
cin>>s>>a>>b;
if(s=='M') mrge(a,b);
else {
if(find(a)!=find(b)) cout<<-1<<endl;
else cout << abs(dist[a] - dist[b]) -1<< endl;
}
}
return 0;
}
0 条评论
目前还没有评论...