#include<cstdio> usingnamespace std; structnode { int data; node* next; node(int dt=0, node* nxt=0) : data(dt), next(nxt) {} }; structSLinkedList { node* head; SLinkedList(int stu) { head = newnode(0, newnode(stu)); } ~SLinkedList() {} // 追求速度 voidinsert(int stu, int newStu, int right){ node* cur = head; while (cur->next) { if (cur->next->data == stu) { if (right) cur = cur->next; cur->next = newnode(newStu, cur->next); return; } cur = cur->next; } } voidtraverse(bool* v)const{ node* cur = head; while (cur->next) { cur = cur->next; if (v[cur->data]) printf("%d ", cur->data); } } };
intmain(){ SLinkedList slist(1); int n, m, stu, right; scanf("%d", &n); bool* v = newbool[n + 1]; for (int i = 1; i <= n; ++i) v[i] = 1; for (int i = 2; i <= n; ++i) { scanf("%d%d", &stu, &right); slist.insert(stu, i, right); } scanf("%d", &m); for (int i = 0; i < m; ++i) { scanf("%d", &stu); v[stu] = 0; } slist.traverse(v); return0; }
voidtraverse(){ int start = 1; while (start <= MAXLEN) { if (!(stus[start][1]) && stus[start][2]) break; ++start; } if (start <= MAXLEN) { while (stus[start][0]) { printf("%d ", start); start = stus[start][2]; } } }
intmain(){ int n, m, stu, right; scanf("%d", &n); memset(stus, 0, sizeof(stus)); stus[1][0] = 1; for (int i = 2; i <= n; ++i) { scanf("%d%d", &stu, &right); insert(stu, i, right); } scanf("%d", &m); for (int i = 0; i < m; ++i) { scanf("%d", &stu); remove(stu); } traverse(); return0; }