結果
問題 |
No.1995 CHIKA Road
|
ユーザー |
![]() |
提出日時 | 2025-10-15 22:44:40 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,015 bytes |
コンパイル時間 | 385 ms |
コンパイル使用メモリ | 82,824 KB |
実行使用メモリ | 149,368 KB |
最終ジャッジ日時 | 2025-10-15 22:45:10 |
合計ジャッジ時間 | 29,760 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 TLE * 5 |
ソースコード
INF = 10**18 from collections import defaultdict N, M = map(int, input().split()) G = defaultdict(list) events = [] def chmax(DP,i,v): if DP[i] < v: DP[i] = v def chmin(DP,i,v): if DP[i] > v: DP[i] = v for i in range(M): a, b = map(int, input().split()) G[a].append(b) events.append(a) events.append(b) events.sort() if N not in events: events.append(N) dp = defaultdict(lambda: INF) dp[1] = 0 # 確定マスのうち一番大きいもの pre = 1 for masu in events: # pre から近道無しで来た場合 option1 = dp[pre] + (masu - pre)*2 option2 = INF # 近道で masu まで来る経路がある場合 if masu in dp: option2 = dp[masu] dp[masu] = min(option1, option2) # 近道で このさきのマスへの経路がある場合は蒔いておく for nex in G[masu]: # dp[nex] = min(dp[nex], dp[masu] + (2*nex - 2*masu - 1) chmin(dp, nex, dp[masu] + (2*nex - 2*masu - 1)) pre = masu ans = dp[N] print(ans)