Files
python/GESP/DuiLieAnPai.cpp

59 lines
1.3 KiB
C++
Raw Permalink Normal View History

2025-08-30 18:35:01 +08:00
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
struct Node {
int id; // 节点编号
int L; // 前驱节点下标
int R; // 后继节点下标
bool deleted = false; // 标记是否被删除
} a[N]; // 用数组存储所有节点
int main() {
int n, m;
cin >> n;
// 初始化头节点(0号节点)和尾节点(n+1号节点)
a[0] = {0, 0, 1};
// 插入第一个节点(编号1)
a[1] = {1, 0, n + 1};
a[n + 1] = {n + 1, 1, 0};
// 插入后续节点
for (int i = 2; i <= n; i++) {
int k, p;
cin >> k >> p;
a[i].id = i;
if (p == 1) { // 插入到k的后面
a[i].L = k;
a[i].R = a[k].R;
a[a[k].R].L = i; // 注意顺序1
a[k].R = i; // 注意顺序2
} else { // 插入到k的前面
a[i].R = k;
a[i].L = a[k].L;
a[a[k].L].R = i; // 注意顺序1
a[k].L = i; // 注意顺序2
}
}
// 处理删除操作
cin >> m;
while (m--) {
int k;
cin >> k;
a[k].deleted = true;
}
// 遍历链表输出结果
for (int c = a[0].R; c != n + 1; c = a[c].R)
if (!a[c].deleted)
cout << a[c].id << " ";
return 0;
}