代码如下:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
struct node{
bool pd;
int l,r;
}s[MAXN];
int n,m;
void add(int i,int k,int p){
if(p==0){
if(s[k].l!=0){
s[i].l=s[k].l;
s[k].l=i;
}
else{
s[k].l=i;
}
}
else if(p==1){
if(s[k].r!=0){
s[i].r=s[k].r;
s[k].r=i;
}
else{
s[k].r=i;
}
}
}
void dfs(int k){
if(s[k].l==0&&s[k].r==0){
return ;
}
dfs(s[k].l);
if(s[k].pd){
cout<<k<<" ";
}
dfs(s[k].r);
}
int main(){
for(int i=1;i<=n;i++){
s[i].pd=1;
}
cin>>n;
for(int i=2;i<=n;i++){
int k,p;
cin>>k>>p;
add(i,k,p);
}
cin>>m;
for(int i=1;i<=m;i++){
int x;
cin>>x;
s[x].pd=0;
}
dfs(1);
return 0;
}