码迷,mamicode.com
首页 > 其他好文 > 详细

[Luogu 1160] 队列安排

时间:2018-01-11 22:24:58      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:ems   https   org   char   nod   阅读   main   blog   for   

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] 队列安排

标签:ems   https   org   char   nod   阅读   main   blog   for   

原文地址:https://www.cnblogs.com/Capella/p/8270425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!