```
#include<cstdio>
using namespace std;
int n,m;
struct node
{
int pre,nxt;
}a[100010];
void init()
{
for(int i=1;i<=n;i++)
a[i].pre=a[i].nxt=-1;
a[1].nxt=-1;
a[1].pre=0;
a[0].nxt=1;
}
void insert_left(int pos,int k)
{
a[a[pos].pre].nxt=k;
a[k].pre=a[pos].pre;
a[pos].pre=k;
a[k].nxt=pos;
}
void insert_right(int pos,int k)
{
a[a[pos].nxt].pre=k;
a[k].nxt=a[pos].nxt;
a[pos].nxt=k;
a[k].pre=pos;
}
void remove(int x)
{
if(a[x].pre==-1)
return;
a[a[x].pre].nxt=a[x].nxt;
a[a[x].nxt].pre=a[x].pre;
a[x].pre=-1;
a[x].nxt=-1;
}
void print()
{
int start=a[0].nxt;
while(1)
{
printf("%d ",start);
if(a[start].nxt==-1)
break;
start=a[start].nxt;
}
}
int main()
{
scanf("%d",&n);
init();
for(int i=2;i<=n;i++)
{
int k,p;
scanf("%d%d",&k,&p);
if(p==1)
insert_right(k,i);
else
insert_left(k,i);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
int x;
scanf("%d",&x);
remove(x);
}
print();
return 0;
}
```
没有在你的代码上改,但有一种更简单的方法!
by Leo2525 @ 2023-09-27 21:59:56
@[Leo2525](/user/983112) 谢大佬,已关
by A_R_O_N_A @ 2023-09-28 09:38:39