这题无意见发现的一个灵异错误
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=30005;
ll T, x, y;
char opt;
ll fa[N], d[N], siz[N];
ll getf(ll x) {
if(x==fa[x]) return x;
ll root=getf(fa[x]);
d[x]+=d[fa[x]];
return fa[x]=getf(fa[x]);
}
ll merge(ll x, ll y) {
ll fx=getf(x), fy=getf(y);
d[fx]+=siz[fy];
fa[fx]=fy;
siz[fy]+=siz[fx];
siz[fx]=0;
}
int main() {
cin>>T;
for(ll i=1; i<=30000; i++) {
fa[i]=i;
d[i]=0;
siz[i]=1;
}
while(T--) {
cin>>opt>>x>>y;
ll fx=getf(x), fy=getf(y);
if(opt=='M') merge(fx, fy);
else {
if(fx!=fy) {
printf("-1\n");
continue;
}
printf("%lld\n", abs(d[x]-d[y])-1);
}
}
return 0;
}
这份已AC代码的第十四行完全没有用。
但是若删了第十四行就过不去了。
为什么啊??