题目:
见https://www.luogu.com.cn/problem/P1160
思路:
emmmm…开始我看标签有队列我还以为是要用队列做,后来没想出来就看了题解,然后发现就是简单的数组模拟链表,注意输出格式就行了,
代码:
#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],ne[N],pre[N],n,m;
int main()
{
cin>>n;
int length=n;
a[1]=1;
for(int i=2;i<=n;i++)
{
int k,p;
cin>>k>>p;
a[i]=i;
if(p==0)//p=0的时候插入k到左边
{
pre[i]=pre[k];
ne[pre[k]]=i;
ne[i]=k;
pre[k]=i;
}
else if(p==1)//p=1的时候插入到k的右边
{
ne[i]=ne[k];
pre[ne[k]]=i;
pre[i]=k;
ne[k]=i;
}
}
cin>>m;
for(int i=1;i<=m;i++)
{
int p;
cin>>p;
if(a[p])//删除操作...
{
length--;
a[p]=0;
ne[pre[p]]=ne[p];
pre[ne[p]]=pre[p];
ne[p]=0;
pre[p]=0;
}
}
for(int i=1;i<=n;i++)
{
if(a[i]&&length&&pre[i]==0)
{
while(a[i]&&length)
{
if(length==1)
cout<<a[i]<<endl;
else
cout<<a[i]<<" ";
a[i]=a[ne[a[i]]];
length--;
}
break;
}
}
return 0;
}