题目
洛谷P1160
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node
{
int L, R;
} a[N];
void insert_left(int x, int k)
{
a[x].R = k;
a[x].L = a[k].L;
a[a[k].L].R = x;
a[k].L = x;
}
void insert_right(int x, int k)
{
a[x].L = k;
a[x].R = a[k].R;
a[a[k].R].L = x;
a[k].R = x;
}
int is_erased[N];
void del(int x)
{
if (is_erased[x])
return;
is_erased[x] = 1;
a[a[x].L].R = a[x].R;
a[a[x].R].L = a[x].L;
}
int n;
void out()
{
int p = 0;
while (a[p].R != n + 1)
{
p = a[p].R;
printf("%d ", p);
}
puts("");
}
void solve()
{
scanf("%d", &n);
a[1].L = -1;
a[1].R = -1;
insert_left(0, 1);
insert_right(n + 1, 1);
for (int i = 2; i <= n; ++i)
{
int k, p;
scanf("%d %d", &k, &p);
if (!p)
insert_left(i, k);
else
insert_right(i, k);
}
int m;
scanf("%d", &m);
for (int i = 1; i <= m; ++i)
{
int k;
scanf("%d", &k);
del(k);
}
out();
}
int main()
{
solve();
return 0;
}