結果
問題 |
No.3111 Toll Optimization
|
ユーザー |
![]() |
提出日時 | 2025-05-17 15:38:14 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 987 ms / 5,000 ms |
コード長 | 908 bytes |
コンパイル時間 | 487 ms |
コンパイル使用メモリ | 82,052 KB |
実行使用メモリ | 109,480 KB |
最終ジャッジ日時 | 2025-05-17 15:38:52 |
合計ジャッジ時間 | 29,144 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 70 |
ソースコード
from heapq import * N,M,K = map(int,input().split()) C = list(map(int,input().split())) INF = 10 ** 16 KN = K * N E = [[] for _ in range(N)] for i in range(M): u,v = map(int,input().split()) u -= 1 v -= 1 E[u].append((v,i)) E[v].append((u,i)) D = [INF] * ((K+1) * N) D[0] = 0 def dijkstra(): q = [(0,0)] while q: d, u1 = heappop(q) if d > D[u1]: continue k = u1 // N u = u1 % N for v,i in E[u]: if k < K: a = v + N * (k + 1) if D[a] > D[u1]: D[a] = D[u1] heappush(q, (D[a], a)) a = v + k * N if D[a] > D[u1] + C[i]: D[a] = D[u1] + C[i] heappush(q, (D[a], a)) return dijkstra() ans = INF for i in range(1,K+2): ans = min(ans,D[N * i - 1]) if ans == INF: print(-1) else: print(ans)