結果
問題 | 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)