首先是按照题意,自己写的代码,自己测试没问题,不知道为什么有一半在PTA上过不去,在牛客上试了,全部执行出错,看了牛客的测试数据,最后的节点都是-1了,不知道怎么继续构造树,以下是代码:
N = int(input())
a = {}
x, y = [], []
for i in range(N):
m = list(map(int, input().split()))
if i == 0:
a[0] = m
else:
try:
a[x[0]] = m
del x[0]
except:
a[y[-1]] = m
del y[-1]
if m[0] != -1:
x.append(m[0])
if m[1] != -1:
y.append(m[1])
num = sorted(list(map(int, input().split())), reverse=False)
#print(a)
node_list = [0]
for i, j in a.items():
t = node_list.index(i)
if j[0] != -1:
node_list.insert(t, j[0])
t = node_list.index(i)
if j[1] != -1:
node_list.insert(t+1, j[1])
#print(node_list)
num_list = {}
for i in range(N):
num_list[node_list[i]] = num[i]
#print(num_list)
print(num_list[0], end='')
p = []
if a[0][0] != -1:
p.append(a[0][0])
if a[0][1] != -1:
p.append(a[0][1])
while p:
m = []
for i in p:
print(' '+str(num_list[i]), end='')
if a[i][0] != -1:
m.append(a[i][0])
if a[i][1] != -1:
m.append(a[i][1])
p = m[:]
接下来,遇到问题就解决问题,看了好多大佬的代码:
a = int(input())
b = [list(map(int,input().split())) for i in range(a)]
m = [-1 for i in range(a)]
m[0], n = (2 ** a, a), [0]
for i in n:
for j in range(2):
if b[i][j] != -1:
m[b[i][j]] = m[i][0] - (-1) ** j * 2 ** (m[i][1] - 1),m[i][1] - 1
n.append(b[i][j])
p = dict(zip(sorted(m), sorted(map(int,input().split()))))
print(' '.join(map(str, [p[i] for i in sorted(p,key = lambda x:(-x[1],x[0]))])))