灵异事件求助
查看原帖
灵异事件求助
400468
Aakkosetsumussa楼主2023/10/26 15:33

这题无意见发现的一个灵异错误

#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代码的第十四行完全没有用。

但是若删了第十四行就过不去了。

为什么啊??

2023/10/26 15:33
加载中...