[Luogu 1160] 队列安排

Posted Capella

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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;
}

谢谢阅读。

以上是关于[Luogu 1160] 队列安排的主要内容,如果未能解决你的问题,请参考以下文章

[luogu p1160] 队列安排

解题报告:luogu P1160

luoguP1160 队列安排 x

洛谷P1160 队列安排 链表

P1160 队列安排

洛谷-P1160 队列安排