1.解题思路
今天写题时我出现了很严重的错误,总是想着使用链式存储解决问题,但是涉及到指针的内容就特别容易出错,导致花费了大量时间也没写出来,通过阅读别人的题解发现用数组来模拟双向链表是一种简单又方便的方法。
2.通过代码
#include<iostream>
using namespace std;
struct node{
int next,front;
bool state;
}a[100001]={0};
void add(int k,int p,int l)
{
if(p==0)
{
a[l].front=a[k].front;
a[l].next=k;
a[a[k].front].next=l;
a[k].front=l;
}
else
{
a[l].front=k;
a[l].next=a[k].next;
a[a[k].next].front=l;
a[k].next=l;
}
return;
}
int main()
{
int N,i,k,p,l;
cin>>N;
a[0].front=0;
a[0].next=0;
add(0,1,1);
for(i=2;i<=N;i++)
{
cin>>k>>p;
add(k,p,i);
}
int M,x;
cin>>M;
while(M--)
{
cin>>x;
a[x].state=1;
}
for(i=a[0].next;i;i=a[i].next)
{
if(a[i].state==0)
cout<<i<<' ';
}
return 0;
}