你代码呢
by cuichenchang @ 2022-07-27 16:55:28
```cpp
//P1196 [NOI2002] 银河英雄传说
#include<bits/stdc++.h>
using namespace std;
//inline int read() {
// int ret=0,f=1;
// char c=getchar();
// for(; c<'0'||c>'9'; c=getchar()) if(c=='-') f=-f;
// for(; c>='0'&&c<='9'; c=getchar()) ret=ret*10+c-'0';
// return ret*f;
//}
const int maxn=1e5*3+55*6;
int dis[maxn];
int Rank[maxn];
int fa[maxn],T;
inline void init(int n) {
for(int i=1; i<=n; i++) {
fa[i]=i;
Rank[i]=1;
}
}
int find(int x) {
if(x==fa[x]) return x;
int ff=find(fa[x]);
dis[x]+=dis[fa[x]];
return fa[x]=ff;
}
//傻*错误,警钟长鸣
//inline void merge(int x,int y) {
// int x=find(i),y=find(j);
// if(x==y) return;
// fa[x]=y;dis[x]+=Rank[y];
// Rank[y]+=Rank[x];
//}
inline void merge(int x,int y) {
int u=find(x),v=find(y);
if(u==v) return;
fa[u]=v;dis[u]+=Rank[v];
Rank[v]+=Rank[u];
}
int main() {
cin>>T;
init(3000+10);
for(int l=1;l<=T;l++){
char c;
int i,j;
cin>>c>>i>>j;
if(c=='M') {
// i=read(),j=read();
merge(i,j);
} else {
// i=read(),j=read();
int x=find(i),y=find(j);
if(x!=y) {
printf("-1\n");
} else {
printf("%d\n",abs(dis[i]-dis[j])-1);
}
}
}
return 0;
}
```
by 柠檬布丁吖 @ 2022-07-27 17:05:37
@[cuichenchang](/user/299950)
by 柠檬布丁吖 @ 2022-07-27 17:05:46
@[柠檬布丁吖](/user/370648) 速通:
`init(3000+10);`
改
`init(30000+10);`
by UnyieldingTrilobite @ 2022-07-27 18:09:02
@[UnyieldingTrilobite](/user/250637)
- # Thanks♪(・ω・)ノ
by 柠檬布丁吖 @ 2022-07-27 18:10:17