@xuzihao1234
我用你的程序跑了一遍样例二,只输出了一个数,然后我认为你的删除有问题,当它删除队尾元素的时候应该把前一个数的nxt调为-1,你直接return了;以上个人见解,错了望理解
by lishunjie @ 2024-04-24 20:00:54
@ [lishunjie](https://www.luogu.com.cn/user/1123721)
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int pre[N],nxt[N],head1=1;
void push_back(int k,int i){
pre[i]=k;
nxt[i]=nxt[k];
pre[nxt[k]]=i;
nxt[k]=i;
}void push_front(int k,int i){
if(k==head1){
head1=i;
}nxt[pre[k]]=i;
pre[i]=pre[k];
nxt[i]=k;
pre[k]=i;
}int head(){
return head1;
}void pop(int x){
if(x==head1){
head1=nxt[x];
}if(pre[x]==-1&&nxt[x]==-1){
return;
}
pre[nxt[x]]=pre[x];
nxt[pre[x]]=nxt[x];
nxt[x]=-1;
pre[x]=-1;
}
int main(){
int n,m,x;
cin>>n;
memset(pre,-1,sizeof(pre));
memset(nxt,-1,sizeof(nxt));
for(int i=2;i<=n;i++){
int k,p;
cin>>k>>p;
if(p){
push_back(k,i);
}else{
push_front(k,i);
}
}cin>>m;
while(m--){
cin>>x;
pop(x);
}int cnt=head();
while(cnt!=-1){
cout<<cnt<<' ';
cnt=nxt[cnt];
}
return 0;
}
```
就能过
by xuzihao12345 @ 2024-04-25 19:25:25