結果
| 問題 |
No.17 2つの地点に泊まりたい
|
| コンテスト | |
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2016-03-01 00:08:12 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,286 bytes |
| コンパイル時間 | 526 ms |
| コンパイル使用メモリ | 82,280 KB |
| 実行使用メモリ | 76,996 KB |
| 最終ジャッジ日時 | 2024-09-24 12:57:33 |
| 合計ジャッジ時間 | 3,114 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 18 WA * 9 |
ソースコード
#!/usr/bin/env pypy3
# -*- coding: utf-8 -*-
import array
import itertools
INF = 2 ** 25
class WarshallFloyd(object):
def __init__(self, max_v, edges):
self.max_v = max_v
self.dist = edges
for v in range(max_v):
self.dist[v][v] = 0
def compute(self):
for u, v, w in itertools.product(range(self.max_v), repeat=3):
new_length = self.dist[u][v] + self.dist[v][w]
self.dist[u][w] = min(self.dist[u][w], new_length)
return self.dist
def main():
n = int(input())
stay_costs = array.array("I", (int(input()) for _ in range(n)))
m = int(input())
edges = [array.array("I", (INF for _ in range(n))) for _ in range(n)]
for _ in range(m):
a, b, c = map(int, input().split())
edges[a][b] = c
edges[b][a] = c
wf = WarshallFloyd(n, edges)
move_costs = wf.compute()
answer = INF
for u0, v0 in itertools.combinations(range(1, n - 1), 2):
for u, v in [(u0, v0), (v0, u0)]:
move_cost = move_costs[0][u] + \
move_costs[u][v] + move_costs[v][n - 1]
stay_cost = stay_costs[u] + stay_costs[v]
answer = min(answer, move_cost + stay_cost)
print(answer)
if __name__ == '__main__':
main()
はむ吉🐹