洛谷P1160 双向链表
Posted hesorchen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷P1160 双向链表相关的知识,希望对你有一定的参考价值。
题目
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node
{
int L, R;
} a[N];
void insert_left(int x, int k) //将x插入到k的左边
{
a[x].R = k;
a[x].L = a[k].L;
a[a[k].L].R = x;
a[k].L = x;
}
void insert_right(int x, int k) //将x插入到k的右边
{
a[x].L = k;
a[x].R = a[k].R;
a[a[k].R].L = x;
a[k].R = x;
}
int is_erased[N];
void del(int x)
{
if (is_erased[x])
return;
is_erased[x] = 1;
a[a[x].L].R = a[x].R;
a[a[x].R].L = a[x].L;
}
int n;
void out()
{
int p = 0;
while (a[p].R != n + 1)
{
p = a[p].R;
printf("%d ", p);
}
puts("");
}
void solve()
{
scanf("%d", &n);
a[1].L = -1;
a[1].R = -1;
insert_left(0, 1);
insert_right(n + 1, 1);
for (int i = 2; i <= n; ++i)
{
int k, p;
scanf("%d %d", &k, &p);
if (!p)
insert_left(i, k);
else
insert_right(i, k);
}
int m;
scanf("%d", &m);
for (int i = 1; i <= m; ++i)
{
int k;
scanf("%d", &k);
del(k);
}
out();
}
int main()
{
solve();
return 0;
}
以上是关于洛谷P1160 双向链表的主要内容,如果未能解决你的问题,请参考以下文章