题目来源:码蹄集
题目描述:
Python代码实现:
n = int(input())
head = 1
pre = [0] * 100005
nxt = [0] * 100005
exist = [0] * 100005
for i in range(2, n + 1):
k, p = map(int, input().split())
if not p:
if k == head:
head = i
pre[i] = pre[k]
nxt[i] = k
nxt[pre[k]] = i
pre[k] = i
if p:
pre[i] = k
nxt[i] = nxt[k]
pre[nxt[k]] = i
nxt[k] = i
m = int(input())
for i in range(1, m + 1):
x = int(input())
if x == head:
head = nxt[x]
if exist[x]:
continue
nxt[pre[x]] = nxt[x]
pre[nxt[x]] = pre[x]
exist[x] = 1
i = head
while i:
print(i, end=" ")
i = nxt[i]
Java代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int head = 1;
int[] pre = new int[100005];
int[] nxt = new int[100005];
int[] exist = new int[100005];
for (int i = 2; i <= n; i++) {
int k = scanner.nextInt();
int p = scanner.nextInt();
if (p == 0) {
if (k == head) {
head = i;
}
pre[i] = pre[k];
nxt[i] = k;
nxt[pre[k]] = i;
pre[k] = i;
}
if (p == 1) {
pre[i] = k;
nxt[i] = nxt[k];
pre[nxt[k]] = i;
nxt[k] = i;
}
}
int m = scanner.nextInt();
for (int i = 1; i <= m; i++) {
int x = scanner.nextInt();
if (x == head) {
head = nxt[x];
}
if (exist[x] != 0) {
continue;
}
nxt[pre[x]] = nxt[x];
pre[nxt[x]] = pre[x];
exist[x] = 1;
}
int i = head;
while (i != 0) {
System.out.print(i + " ");
i = nxt[i];
}
}
}
C++代码实现:
参考链接:https://blog.csdn.net/qq_36920028/article/details/69802626
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
int n,head,k,p,pre[100005],nxt[100005],i,m,x,exist[100005];
int main()
{
scanf("%d",&n);
head=1;
for(i=2;i<=n;i++)
{
scanf("%d%d",&k,&p);
if(!p)
{
if(k==head) head=i;
pre[i]=pre[k];
nxt[i]=k;
nxt[pre[k]]=i;
pre[k]=i;
}
if(p)
{
pre[i]=k;
nxt[i]=nxt[k];
pre[nxt[k]]=i;
nxt[k]=i;
}
}
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d",&x);
if(x==head) head=nxt[x];
if(exist[x]) continue;
nxt[pre[x]]=nxt[x];
pre[nxt[x]]=pre[x];
exist[x]=1;
}
for(i=head;i;i=nxt[i])
printf("%d ",i);
return 0;
}
代码提交测试结果:
附B站老师思路讲解,可供参考:https://www.bilibili.com/video/BV1Ua4y1V7qX/?t=3387.2