rt,2 个 WA 和 3 个 TLE.
#include<cstdio>
using namespace std;
const int MAXN=100005;
int index[MAXN],tot;
struct Node {
int pre,nxt,val;
Node(int _pre=0,int _nxt=0,int _val=0) {
pre=_pre;
nxt=_nxt;
val=_val;
}
}node[MAXN];
void ins_back(int x,int y) {
int now=index[x];
node[++tot]=Node(now,node[now].nxt,y);
node[node[now].nxt].pre=node[now].nxt=index[y]=tot;
}
void ins_front(int x,int y) {
int now=index[x];
node[++tot]=Node(node[now].pre,now,y);
node[node[now].pre].nxt=node[now].pre=index[y]=tot;
}
void del(int x) {
int y=node[index[x]].pre,z=node[index[x]].nxt;
index[x]=0;
node[y].nxt=z;
node[z].pre=y;
}
int main() {
int n,m,k,p,x;
scanf("%d",&n);
node[0]=Node();
ins_back(0,1);
for(int i=2;i<=n;i++) {
scanf("%d %d",&k,&p);
if(p==0)
ins_front(k,i);
else
ins_back(k,i);
}
scanf("%d",&m);
for(int i=1;i<=m;i++) {
scanf("%d",&x);
if(index[x]!=0)
del(x);
}
int t=node[0].nxt;
while(t!=0) {
printf("%d ",node[t].val);
t=node[t].nxt;
}
return 0;
}