请问为什么这样
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int fa[300005], pre[300005], siz[300005];
int T;
int fnd(int x) {
if(fa[x] == x)
return fa[x];
int f = fnd(fa[x]);
pre[x] += pre[fa[x]];
return fa[x] = f;
}
int main() {
std::ios::sync_with_stdio(0);
cin>>T;
for(int i = 1; i <= 30000; i++) {
fa[i] = i;
siz[i] = 1;
pre[i] = 0;
}
char op;
int x, y;
while(T--) {
cin>>op>>x>>y;
int fx = fnd(x), fy = fnd(y);
if(op == 'M') {
pre[fx] += siz[fy];
fa[fx] = fy;
siz[fy] += siz[fx];
siz[fx] = 0;
}
if(op == 'C') {
if(fx != fy)
cout<<"-1"<<'\n';
else
cout<<abs(pre[x] - pre[y]) - 1 <<'\n';
}
}
return 0;
}
就可以通过本题,
但把 fnd() 函数改成这样
int fnd(int x) {
if(fa[x] == x)
return fa[x];
pre[x] += pre[fa[x]];
return fa[x] = fnd(fa[x]);
}
就会WA八个点。
请问是函数返回值优先级的问题吗