#include 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; }