結果
| 問題 |
No.788 トラックの移動
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-07-29 00:01:13 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,263 bytes |
| コンパイル時間 | 156 ms |
| コンパイル使用メモリ | 81,792 KB |
| 実行使用メモリ | 88,768 KB |
| 最終ジャッジ日時 | 2024-07-18 14:37:16 |
| 合計ジャッジ時間 | 13,420 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 8 WA * 2 TLE * 4 |
ソースコード
import heapq
N,M,L = map(int,input().split())
L -= 1
lst = list(map(int,input().split()))
lsg = [[] for i in range(N)]
for i in range(M):
a,b,c = map(int,input().split())
a -= 1
b -= 1
lsg[a].append((b,c))
lsg[b].append((a,c))
INF = float('INF')
distL = [INF]*(N)
used = [False]*(N)
distL[L] = 0
h = [(0,L)]
while h:
c,x = heapq.heappop(h)
if used[x]:
continue
used[x] = True
for j,cos in lsg[x]:
if used[j]:
continue
if distL[j] > distL[x]+cos:
distL[j] = distL[x]+cos
heapq.heappush(h, (distL[j],j))
ans = INF
for i in range(N):
st = i
distC = [INF]*(N)
used = [False]*(N)
distC[st] = 0
h = [(0,st)]
while h:
c,x = heapq.heappop(h)
if used[x]:
continue
used[x] = True
for j,cos in lsg[x]:
if used[j]:
continue
if distC[j] > distC[x]+cos:
distC[j] = distC[x]+cos
heapq.heappush(h, (distC[j],j))
divmax = -INF
sumcost = 0
for k in range(N):
sumcost += distC[k]*lst[k]*2
if lst[k] >= 1:
divmax = max(divmax,distC[k]-distL[k])
ans = min(ans,sumcost-divmax)
print(ans)