社区讨论
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 条回复,欢迎继续交流。
正在加载回复...