結果
| 問題 |
No.807 umg tours
|
| コンテスト | |
| ユーザー |
neterukun
|
| 提出日時 | 2019-06-10 06:48:53 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 3,599 ms / 4,000 ms |
| コード長 | 1,641 bytes |
| コンパイル時間 | 97 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 122,596 KB |
| 最終ジャッジ日時 | 2024-10-06 00:27:15 |
| 合計ジャッジ時間 | 25,592 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
import sys
import heapq
imput = sys.stdin.readline
def dijkstra(start, g):
INF = float("inf")
# distance[i][j]
# := チケットを使ってないとき(i=0)、使ったとき(i=1)のj番目まで行くときの最短距離
distance = [[INF]*n for i in range(2)]
distance[0][start] = 0
distance[1][start] = 0
cost = 0
#q = [(距離, 現在地, チケットを使っているかどうか)]
q = [(0, start, 0)]
while q:
c, v, is_used = heapq.heappop(q)
if is_used == 1:
if distance[1][v] < c:
continue
for cost, t in g[v]:
if distance[1][v] + cost < distance[1][t]:
distance[1][t] = distance[1][v] + cost
heapq.heappush(q, (distance[1][t], t, 1))
else:
if distance[0][v] < c:
continue
for cost, t in g[v]:
if distance[0][v] + cost < distance[0][t]:
distance[0][t] = distance[0][v] + cost
heapq.heappush(q, (distance[0][t], t, 0))
if distance[0][v] < distance[1][t]:
distance[1][t] = distance[0][v]
heapq.heappush(q, (distance[1][t], t, 1))
return distance
n, m = map(int, input().split())
info = tuple(tuple(map(int, input().split())) for i in range(m))
graph = [[] for i in range(n)]
for i in range(m):
graph[info[i][0] - 1].append([info[i][2], info[i][1] - 1])
graph[info[i][1] - 1].append([info[i][2], info[i][0] - 1])
start = 0
ans = dijkstra(start, graph)
for i in range(n):
print(ans[0][i] + ans[1][i])
neterukun