代码求调,输出队列时队列里元素位置不对
#include<bits/stdc++.h>
using namespace std;
int n,k,p,m,z=1,ans[100001],lenans,zz;
struct lian{
int zx,bzx;
}l[100001];
inline int read(){
int w=0,s=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
s=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
w=w*10+ch-'0';
ch=getchar();
}
return s*w;
}
int main(){
// freopen("arrange.in","r",stdin);
// freopen("arrange.out","w",stdout);
n=read();
for(register int i=2;i<=n;++i){
k=read();
p=read();
if(p==1){
l[i].zx=l[k].zx;
l[l[k].zx].bzx=i;
l[k].zx=i;
l[i].bzx=k;
}
else if(p==0){
l[i].zx=l[k].zx;
l[l[k].zx].bzx=i;
l[k].zx=i;
l[i].bzx=k;
}
}
m=read();
for(register int i=1;i<=m;++i){
int x;
x=read();
l[l[x].bzx].zx=l[x].zx;
l[l[x].zx].bzx=l[x].bzx;
if(x==z){
z=l[x].bzx;
}
}
zz=z;
while(l[z].zx!=0){
ans[++lenans]=l[z].zx;
// printf("%d ",l[z].zx);
z=l[z].zx;
}
//cout<<lenans;
for(register int i=lenans;i>=1;i--)
printf("%d ",ans[i]);
printf("%d ",zz);
return 0;
}
/*
4
1 0
2 1
1 0
2
3
3
*/