注意
只输出个最早时间也能得70分,最晚时间的输出注意凑后往前找最小
代码
n,m = map(int,input().split()) # n:距离大赛开幕天数,m:训练科目数量
parents =[0] + list(map(int,input().split()))
need_days =[0] + list(map(int,input().split()))
flag = 1 # 判断是否需要输出第二波
earest_day = [0]*(m+1)
latest_day = [0]*(m+1)
for i in range(1,m+1):
if parents[i] == 0:
earest_day[i] = 1
else:
p = parents[i]
day = need_days[parents[i]]
while p:
p = parents[p]
day += need_days[p]
earest_day[i] = day+1 # day直接算出来是结束的天数
if need_days[i] + earest_day[i]-1>n:
flag = 0
print(*earest_day[1:])
if flag:
for i in range(m,0,-1):
tmp = 366
for j in range(i+1,m+1):
if parents[j] == i:
tmp = min(tmp,latest_day[j]) # 这里易忘,注意要找到最小的,即后面执行时间最早的
if tmp==366:
latest_day[i] = n-need_days[i]+1
else:
latest_day[i] = tmp-need_days[i]
print(*latest_day[1:])