洛谷P1160 队列安排
#include<stdio.h>
const int NN=100000;
struct node{
int id;
int nextid,preid;
}nodes[NN];
int insert(int i,int k,int p)
{
int j=k;
{
if(p==0)
{
nodes[i].id=i;
nodes[i].nextid=j;//下一个节点的数组下标
nodes[i].preid=nodes[j].preid;
int s=nodes[j].preid;
nodes[s].nextid=i;
nodes[j].preid=i;
}
else
{
nodes[i].id=i;
nodes[nodes[j].nextid].preid=i;
nodes[i].preid=j;
nodes[i].nextid=nodes[j].nextid;
nodes[j].nextid=i;
}
}
}
int deleteM(int x)
{
nodes[x].id=0;
nodes[nodes[x].preid].nextid=nodes[x].nextid;
nodes[nodes[x].nextid].preid=nodes[x].preid;
}
int main()
{
int N,k,p;
scanf("%d",&N);
//首结点指向一号同学
nodes[0].nextid=1;
nodes[0].id=N;
nodes[1].id=1;
nodes[1].preid=0;
for(int i=2;i<=N;i++)
{
scanf("%d %d",&k,&p);
insert(i,k,p);
}
int M;
scanf("%d",&M);
int x;
for(int j=1;j<=M;j++)
{
scanf("%d",&x);
if(nodes[x].id==x) deleteM(x);
}
int n=0;
for(int i=0;i<=N-1;i++)
{
if(nodes[n].id==0) break;
int n=nodes[n].nextid;
if(n==0) break;
printf("%d ",n);
}
}
请各位帮忙看看,谢谢大家