队列安排WA了3个点
#include<bits/stdc++.h>
using namespace std;
int n,m,x,k,p;
struct node{
int num,net,pre;
}A[500005];
void link(int a,int b,int f){
if (f==0)
A[b].net=a,A[b].pre=A[a].pre,A[A[a].pre].net=b,A[a].pre=b;
else
A[b].net=A[a].net,A[b].pre=a,A[A[a].net].pre=b,A[a].net=b;
}
void remove(int a,int b){
A[a].net=A[b].net,A[A[b].net].pre=A[b].pre;
}
int main()
{
scanf("%d",&n);
A[0].num=-1,A[1].num=1,A[0].net=1,A[1].pre=0,A[n+1].num=-1,A[1].net=n+1,A[n+1].pre=1;
for (int i=2;i<=n;i++)
scanf("%d%d",&k,&p),A[i].num=i,link(k,i,p);
scanf("%d",&m);
while(m--)
scanf("%d",&x),remove(A[x].pre,x);
for (int f=A[0].net;A[f].num!=-1;f=A[f].net)printf("%d ",A[f].num);
return 0;
}