玄关求调
  • 板块题目总版
  • 楼主gezi__gugu
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/5 13:01
  • 上次更新2024/5/5 15:03:32
查看原帖
玄关求调
1144311
gezi__gugu楼主2024/5/5 13:01

P1196

就样例全过,评测全错,下载数据都过了但是评测多了很多输出,求调

#include<bits/stdc++.h>
using namespace std;
const int N = 3e4 + 5;
int T, fa[N], dis[N], siz[N];

int find(int x) {
	if(x == fa[x]) return x;
	int t = fa[x];
	fa[x] = find(fa[x]);
	dis[x] += dis[t];
	return fa[x];
}

void join(int x, int y) {
	x = find(x);
	y = find(y);
	if(x == y) return;
	fa[x] = y;
	dis[x] += siz[y];
	siz[y] += siz[x];
}

int main() {
	cin >> T;
	for(int i = 1; i <= N; i++) {
		fa[i] = i;
		siz[i] = 1;
	}
	char op;
	int x, y;
	while(T--) {
		cin >> op >> x >> y;
		if(op == 'M') {
			join(x, y);
			continue;
		} else {
			if(find(x) != find(y)) {
				printf("-1\n");
			} else {
				printf("%d\n", abs(dis[x] - dis[y]) - 1);
			}
		}
	}
	return 0;
}
2024/5/5 13:01
加载中...