rt,求改
#include <cstdio>
using namespace std;
class List{
private:
struct node{
int l,r;
node():l(-1),r(-1){}
} *a;
public:
List(int size=1e5){
a=new node[size+10];
a[0].r=1,a[1].l=0;
}
~List(){
delete []a;
}
void addl(int x,int pos){
a[x].r=pos;
a[a[pos].l].r=x;
a[x].l=a[pos].l;
a[pos].l=x;
}
void addr(int x,int pos){
a[x].l=pos;
a[a[pos].r].l=x;
a[x].r=a[pos].r;
a[pos].r=x;
}
void del(int x){
if(a[x].l==-1&&a[x].r==-1) return ;
a[a[x].l].r=a[x].r;
a[a[x].r].l=a[x].l;
a[x].l=a[x].r=-1;
}
void run(){
for(int i=a[0].r;~i;i=a[i].r){
printf("%d ",i);
}
}
};
List a;
int n,m;
int main(){
scanf("%d",&n);
for(int i=2;i<=n;i++){int pos,op;
scanf("%d%d",&pos,&op);
if(op==0) a.addl(i,pos);
else a.addr(i,pos);
}
scanf("%d",&m);
for(int i=1;i<=m;i++){int x;
scanf("%d",&x);
a.del(x);
}
a.run();
return 0;
}