代码如下:
#include <iostream>
using namespace std;
#include <unordered_map>
int n, m, zb, lr;
struct link
{
int id;
link *last;
link *next;
};
unordered_map<int, link *> um;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n;
link *pHead = new link;
link *tail = new link;
link *a1 = new link;
pHead->next = a1;
a1->id = 1;
a1->last = pHead;
a1->next = tail;
tail->last = a1;
um[1] = a1;
for (int i = 2; i <= n; ++i)
{
link *ai = new link;
ai->id = i;
cin >> zb >> lr;
if (lr)
{
ai->next = um[zb]->next;
ai->last = um[zb];
um[zb]->next->last = ai;
um[zb]->next = ai;
}
else
{
ai->next = um[zb];
ai->last = um[zb]->last;
um[zb]->last->next = ai;
um[zb]->last = ai;
}
um[i] = ai;
}
cin >> m;
for (int i = 1; i < m; ++i)
{
cin >> zb;
um[zb]->last->next = um[zb]->next;
um[zb]->next->last = um[zb]->last;
delete um[zb];
}
for (link *p = pHead->next; p != tail; p = p->next)
cout << p->id << " ";
return 0;
}