洛谷p1160队列安排

xiaoxiao2021-02-28  82

原题

用数组模拟很费事,所以用双向链表,套用模板即可。

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<iomanip> #define in(x) scanf("%d",&x); using namespace std; int n,m,head[200005],vis[200005]; struct node{ int next,up,mark; }a[200005]; int main() { in(n);int cnt=1; a[cnt].next=0;a[cnt].up=0; a[cnt].mark=1; for(int i=2;i<=n;++i) { int x,y;in(x);in(y); if(y==0) { a[++cnt].next=x; a[cnt].up=a[x].up; a[a[x].up].next=cnt; a[x].up=cnt; } else { a[++cnt].next=a[x].next; a[a[x].next].up=cnt; a[x].next=cnt; a[cnt].up=x; } } in(m);memset(vis,0,sizeof(vis)); for(int i=1;i<=m;++i) { int x;in(x); if(vis[x]==1) continue; a[a[x].up].next=a[x].next; a[a[x].next].up=a[x].up; vis[x]=1; } for(int i=1;i<=n;++i) if(a[i].up==0&&vis[i]==0) { for(int j=i;j;j=a[j].next) { cout<<j<<" "; } } cout<<endl; return 0; }

转载请注明原文地址: https://www.6miu.com/read-45149.html

最新回复(0)