[Python与CSP的姻缘] 202212-2 训练计划

注意

只输出个最早时间也能得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:])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值