这是我写的代码,五个测试点都是RE
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<malloc.h>
typedef struct node{
int num;
struct node* bef;
struct node* aft;
}jj;
int main(){
int n, k, p;
scanf("%d", &n);
int i;
jj* head=(jj*)calloc(1, sizeof(jj));
jj* a=(jj*)calloc(1, sizeof(jj));
head->aft=a;
a->num=1;
a->bef=head;
jj* c[100005]={0};
c[1]=a;
for(i=1; i<=n-1; i++){
jj* b=(jj*)calloc(1, sizeof(jj));
//j* b=(jj*)calloc(1, sizeof(jj));
b->num=i+1;
scanf("%d%d", &k, &p);
if(p==0){
if(c[k]->bef==head){
b->aft=head->aft;
b->bef=head;
head->aft=b;
(b->aft)->bef=b;
}else{
b->bef=c[k]->bef;
c[k]->bef->aft=b;
c[k]->bef=b;
b->aft=c[k];
}
c[i+1]=b;
}else if(p==1){
if(c[k]->aft==NULL){
b->aft=NULL;
c[k]->aft=b;
b->bef=c[k];
}else{
b->aft=c[k]->aft;
c[k]->aft->bef=b;
b->bef=c[k];
c[k]->aft=b;
}
c[k+1]=b;
}
}
int m;
scanf("%d", &m);
while(m--){
scanf("%d", &k);
if(c[k]==NULL) continue;
else{
if(c[k]->bef==head){
head->aft=c[k]->aft;
c[k]->aft->bef=head;
}else if(c[k]->aft==NULL){
c[k]->bef->aft=NULL;
}else{
c[k]->bef->aft=c[k]->aft;
c[k]->aft->bef=c[k]->bef;
}
c[k]=NULL;
}
}
head=head->aft;
while(head){
printf("%d ", head->num);
head=head->aft;
}
return 0;
}
球球各位大佬指一条明路