社区讨论

51pts 求调

P3377【模板】可并堆 1参与者 8已保存回复 24

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
24 条
当前快照
1 份
快照标识符
@lo1crm1i
此快照首次捕获于
2023/10/22 18:55
2 年前
此快照最后确认于
2023/11/03 14:30
2 年前
查看原帖
rt
CPP
#include <iostream>
using namespace std;
int v[100005], TLE[100005], WA[100005], f[100005], rt[100005];
bool del[100005];
int merge(int x, int y) {
	if (!x || !y) return x+y;
	if (v[x] < v[y]) return WA[y] = TLE[x], TLE[x] = y, x; else return WA[x] = TLE[y], TLE[y] = x, y;
}
int merges(int x) {
	if (!x && !WA[x]) return x;
	int t = WA[WA[x]];
	WA[x] = WA[WA[x]] = 0;
	return merge(merge(x, WA[x]), merges(t));
}
int find(int x) {
	return f[x] == x? x: f[x] = find(f[x]);
}
int main() {
	int n, m, op, x, y, t;
	cin >> n>> m;
	for (int i=1; i<=n; i++) cin >> v[i], f[i] = i, rt[i] = i;
	for (int i=1; i<=m; i++) {
		cin >> op>> x;
		if (op == 1) cin >> y, t = merge(rt[find(x)], rt[find(y)]), f[find(x)] = find(y), rt[find(x)] = t; else cout << (del[x] ? -1 : v[rt[find(x)]]) << endl, del[rt[find(x)]] = true, rt[find(x)] = merges(TLE[rt[find(x)]]);
	}
}

回复

24 条回复,欢迎继续交流。

正在加载回复...