[Luogu 1160] 队列安排

Luogu 1160 队列安排

<题目链接>


链表H2O H2O H2O模板。

太久不写链表,忘干净了,竟调了半个晚上。

保留备用。

#include <cstdio>
#include <cstring>
const int MAXN=100010;
int n,m;
class LinkedList
{
	public:
		LinkedList(void)
		{
			memset(a,0,sizeof a);
			memset(s,0,sizeof s);
			a[1]=1,s[0].c[1]=cnt=1,s[cnt].v=1;
		}
		void Insert(int n,int x,bool flag)
		{
			int i=a[n],j=s[i].c[flag],p=a[x]=++cnt;
			s[p].v=x,s[i].c[flag]=p,s[p].c[!flag]=i,s[p].c[flag]=j,s[j].c[!flag]=p;
		}
		void Delete(int x)
		{
			if(a[x])
			{
				int i=a[x],p=s[i].c[0],q=s[i].c[1];
				a[x]=0,s[p].c[1]=q,s[q].c[0]=p;
			}
		}
		void Print(void)
		{
			for(int i=s[0].c[1];i;i=s[i].c[1])
				printf("%d ",s[i].v);
			putchar('\n');
		}
	private:
		int cnt,a[MAXN];
		struct node
		{
			int v,c[2];
		}s[MAXN];
}T;
int main(int argc,char *argv[])
{
	scanf("%d",&n);
	for(int i=2,k,p;i<=n;++i)
	{
		scanf("%d %d",&k,&p);
		T.Insert(k,i,p);
	}
	scanf("%d",&m);
	for(int i=1,x;i<=m;++i)
	{
		scanf("%d",&x);
		T.Delete(x);
	}
	T.Print();
	return 0;
}

谢谢阅读。

posted @ 2018-01-11 20:18  Capella  阅读(105)  评论(0编辑  收藏  举报

谢谢光临