洛谷P1160 队列安排
//
// main.cpp
// 队列安排New
//
// Created by Helen on 2020/8/4.
// Copyright © 2020 Helen. All rights reserved.
//
#include<iostream>
using namespace std;
int arr[100010][3];
int n,m,k,p;
int main()
{
cin >> n;
int j=1;
arr[1][1]=1;
for(int i=2;i<=n;i++)
{
cin >> k >> p;
arr[i][1]=i;
if(p==0)
{
arr[arr[k][3]][2]=i;
arr[i][2]=k;
arr[i][3]=arr[k][3];
arr[k][3]=i;
if(k==j) j=i;
}
else
{
arr[i][2]=arr[k][2];
arr[arr[k][2]][3]=i;
arr[k][2]=i;
arr[i][3]=k;
}
}
cin >> m;
for(int i=1;i<=m;i++)
{
cin >> k;
if(arr[k][1]!=0)
{
arr[k][1]=0;
arr[arr[k][3]][2]=arr[k][2];
arr[arr[k][2]][3]=arr[k][3];
n--;
if(k==j) j=arr[k][2];
}
}
for (int i=1,k=j;i<=n;i++)
{
cout << arr[k][1] << " ";
k=arr[k][2];
}
return 0;
}
----------------------------------------✂︎---------------------------------------------
此题解已经AC欢迎指出更多优化方法~