結果
| 問題 |
No.3111 Toll Optimization
|
| ユーザー |
かえる☔
|
| 提出日時 | 2025-04-19 10:38:19 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 904 ms / 5,000 ms |
| コード長 | 800 bytes |
| コンパイル時間 | 664 ms |
| コンパイル使用メモリ | 82,412 KB |
| 実行使用メモリ | 194,020 KB |
| 最終ジャッジ日時 | 2025-04-19 10:38:53 |
| 合計ジャッジ時間 | 30,954 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 70 |
ソースコード
from heapq import heappop as pop, heappush as push
N, M, K = map(int, input().split())
C = list(map(int, input().split()))
uv = [map(int, input().split()) for _ in range(M)]
edges = [[] for _ in range(N*4)]
for c, (u, v) in zip(C, uv):
u -= 1
v -= 1
for i in range(K+1):
edges[i*N+u].append((i*N+v, c))
edges[i*N+v].append((i*N+u, c))
if i:
edges[(i-1)*N+u].append((i*N+v, 0))
edges[(i-1)*N+v].append((i*N+u, 0))
dist = [float("inf")]*(N*(K+1))
pq = [(0, 0)]
dist[0] = 0
while pq:
c, v = pop(pq)
if dist[v] < c:
continue
if v%N == N-1:
print(c)
break
for u, bc in edges[v]:
if dist[u] <= c + bc:
continue
dist[u] = c+bc
push(pq, (c+bc, u))
else:
print(-1)
かえる☔