結果
| 問題 | No.3111 Toll Optimization |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-18 08:20:49 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,459 ms / 5,000 ms |
| コード長 | 787 bytes |
| 記録 | |
| コンパイル時間 | 925 ms |
| コンパイル使用メモリ | 82,036 KB |
| 実行使用メモリ | 185,660 KB |
| 最終ジャッジ日時 | 2025-05-18 08:21:36 |
| 合計ジャッジ時間 | 45,263 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 70 |
ソースコード
import heapq
N,M,K = map(int,input().split())
C = [0]+list(map(int,input().split()))
G = {i:[] for i in range(1,(K+1)*N+1)}
for i in range(1,M+1):
u,v = map(int,input().split())
G[u].append((v,C[i]))
G[v].append((u,C[i]))
for k in range(1,K+1):
G[u+k*N].append((v+k*N,C[i]))
G[v+k*N].append((u+k*N,C[i]))
G[u+k*N].append((v+(k-1)*N,0))
G[v+k*N].append((u+(k-1)*N,0))
INFTY = 10**14+100
dist = [INFTY]*((K+1)*N+1)
dist[1+K*N] = 0
que = [(0,1+K*N)]
while que:
d,x = heapq.heappop(que)
if dist[x]<d:continue
for y,c in G[x]:
if dist[y]>d+c:
dist[y] = d+c
heapq.heappush(que,(d+c,y))
ans = dist[N]
for i in range(1,K+1):
ans = min(ans,dist[i*N])
if ans>=INFTY:
print(-1)
else:
print(ans)