結果
問題 |
No.844 split game
|
ユーザー |
|
提出日時 | 2021-06-23 13:58:50 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,198 bytes |
コンパイル時間 | 288 ms |
コンパイル使用メモリ | 82,292 KB |
実行使用メモリ | 132,680 KB |
最終ジャッジ日時 | 2024-06-24 10:43:55 |
合計ジャッジ時間 | 8,650 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 4 |
other | AC * 5 TLE * 1 -- * 50 |
ソースコード
from heapq import heappop,heappush def main1(n,m,a,lrp): g=[[] for _ in range(n+1)] for l,r,p in lrp: # 区間[l,r]を作る→次作れるのは[r+1,x] g[l-1].append([r,p]) inf=float('inf') seen=[-inf]*n*2 # seen[0*n+v]:現在vにいて、左に黒線ありのときの最大値 # seen[1*n+v]:現在vにいて、左に黒線なしのときの最大値 seen[0]=0 todo=[[-seen[0],0]] ans=0 while todo: p,v=heappop(todo) p=-p if seen[v]>p:continue if v%n+1==n: ans=max(ans,p) elif seen[n+v%n+1]<seen[v]: seen[n+v%n+1]=seen[v] heappush(todo,[-seen[n+v%n+1],n+v%n+1]) if v<n: for nv,np in g[v]: if nv==n: ans=max(ans,p+np) else: if seen[nv]<p+np-a: seen[nv]=p+np-a heappush(todo,[-seen[nv],nv]) else: for nv,np in g[v-n]: if nv==n: ans=max(ans,p+np-a) else: if seen[nv]<p+np-a-a: seen[nv]=p+np-a-a heappush(todo,[-seen[nv],nv]) return ans if __name__=='__main__': n,m,a=map(int,input().split()) lrp=[list(map(int,input().split())) for _ in range(m)] ret1=main1(n,m,a,lrp) print(ret1)