我不会什么线性表,就用string和map做的
样例过,2WA 3RE
#include<iostream>
#include<string>
#include<map>
using namespace std;
int n,m;
string q;//队列
map<char,int>t;//标记是否被删
map<char,int>pos;//每个人对应的下标
int main(){
q="1";
pos['1']=0;
cin>>n;
for(int i=2;i<=n;i++){
int k,p;
cin>>k>>p;
if(p==0){//左边
q.insert(pos[char(k+48)],1,char(i+48));
pos[char(i+48)]=pos[char(k+48)];
for(int j=pos[char(i+48)]+1;j<q.length();j++){//后面的下标+1
pos[char(j+48)]++;
}
}
else{//右边
q.insert(pos[char(k+48)]+1,1,char(i+48));
pos[char(i+48)]=pos[char(k+48)]+1;
for(int j=pos[char(i+48)]+1;j<q.length();j++){//后边的下标+1
pos[char(j+48)]++;
}
}
}
for(int i=0;i<q.length();i++){//标记
t[q[i]]=114514;
}
cin>>m;
for(int i=1;i<=m;i++){
int u;
cin>>u;
t[char(u+48)]=0;//被枪毙的
}
for(int i=0;i<q.length();i++){
if(t[q[i]]==114514) cout<<q[i]<<" ";//没挂就输出
}
return 0;
}
救救蒟蒻吧