【题解】洛谷P1160队列安排 链表

本文详细解析了洛谷平台上P1160题目的解法,主要涉及数据结构中的链表操作。通过理解题意并运用链表特性,提出有效的算法策略来解决队列安排问题。
摘要由CSDN通过智能技术生成

题目链接

#include<cstdio>
#include<cstring>
int right[100100],left[100100];
void link1(int l,int r){
    right[left[r]]=l;
    left[l]=left[r];
    left[r]=l;
    right[l]=r;
}
void link2(int l,int r){
    left[right[l]]=r;
    right[r]=right[l];
    right[l]=r;
    left[r]=l;
}
void del(int x){
    right[left[x]]=right[x];
    left[right[x]]=left[x];
    left[x]=right[x]=-1;
}
int main(){
    //freopen("in.txt","r",stdin);
    int n,i,k,p,m,x,f=1;
    scanf("%d",&n);
    memset(left,-1,sizeof(left));
    memset(right,-1,sizeof(right));
    left[0]=right[0]=1;left[1]=right[1]=0;
    for(i=2;i<=n;i++){
        scanf("%d%d",&k,&p);
        if(p==0)link1(i,k);
        else link2(k,i);
    }
    scanf("%d",&m);
    for(i=1;i<=m;i++){
        scanf("%d",&x);
        int lx=left[x],rx=right[x];
        if(lx==-1)continue;
        del(x);
    }
    i=0;
    for(;;){
        if(!right[i]){
            printf("\n");
            return 0;
        }
        if(f){
            printf("%d",right[i]);
            f=0;
        }
        else printf(" %d",right[i]);
        i=right[i];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值