結果
| 問題 | No.3111 Toll Optimization |
| コンテスト | |
| ユーザー |
ntuda
|
| 提出日時 | 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)
ntuda