#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int e[N], l[N], r[N], idx = 1, n;
void right(int i, int k)
{
e[++ idx] = i;
l[idx] = k;
r[idx] = r[k];
r[k] = idx;
l[r[idx]] = idx;
}
void deletion(int k)
{
r[l[k]] = r[k];
l[r[k]] = l[k];
}
int main()
{
cin >> n;
r[0] = 1;
l[1] = 0;
e[0] = -1;
e[1] = 1;
r[1] = -1;
for(int i = 2; i <= n; i++)
{
int k, p;
cin >> k >> p;
if(p == 0) right(i,l[k]);
else right(i,k);
}
cin >> n;
while(n --)
{
int k;
cin >> k;
deletion(k);
}
for(int i = r[0]; i != -1;i = r[i])
cout << e[i] <<' ';
}
感觉没有任何错误,插在k左边就等于插在了l[k]的右边