样例能过全WA求助

P1160 队列安排

@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


|