1160 队列安排
这不就是链表吗
链表的基本操作
这个题不是我想的这么简单
首先对于前后其实就是左右的关系
所谓的插入左右实质上什么,其实没有什么含义,比如i要插到k左面,其实i就是在k的前面
同样的i在k的右面就当成后面
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
int num[101000],qian[101000],hou[101000];
int head,n,m;
int k,p;
int t;
int main()
{
cin>>n;//输入n个同学
head=1;
num[1]=1;
for(int i=2;i<=n;i++)
{
cin>>k>>p;//当前同学i插入到k的p边
num[i]=1;//num[2]=1;
if(p==0)//插入左边
{
qian[i]=qian[k];
hou[qian[k]]=i;
hou[i]=k;
qian[k]=i;
if(k==head)//如果插入的数是头,就把头指针指向插入的数
{
head=i;
}
}
else
{
qian[hou[k]]=i;
hou[i]=hou[k];
qian[i]=k;
hou[k]=i;
}
}
----分割线----
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>t;
num[t]=0;
}
for(int i=1;i<=n;i++)
{
if(num[head]>0)
{
cout<<head<<" ";
}
head=hou[head];
}
cout<<endl;
return 0;
}