一个问题
查看原帖
一个问题
801371
Midnight_szx楼主2023/5/4 22:11

请问为什么这样

#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八个点。

请问是函数返回值优先级的问题吗

2023/5/4 22:11
加载中...