結果
| 問題 |
No.160 最短経路のうち辞書順最小
|
| コンテスト | |
| ユーザー |
akasia_midori
|
| 提出日時 | 2022-05-22 15:08:35 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,611 bytes |
| コンパイル時間 | 369 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 79,104 KB |
| 最終ジャッジ日時 | 2024-09-20 12:37:19 |
| 合計ジャッジ時間 | 4,723 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 4 |
| other | RE * 26 |
ソースコード
def oi(): return int(input())
def os(): return input()
def mi(): return list(map(int, input().split()))
# import sys
# input = sys.stdin.readline
input_count = 0
N, M, START, GOAL = mi()
G = {i:[] for i in range(N)}
for i in range(M):
A,B,C = mi()
# Gの第三項に引き継ぎたいものを載せる
# 何個目~ならi
# 経路復元なら (A,B)など 行先だけ保存しておけばいいかも
G[A].append((B, C))
G[B].append((A, C))
# V: 頂点数
# g[v] = {(w, cost)}:
# 頂点vから遷移可能な頂点(w)とそのコスト(cost)
# r: 始点の頂点
from heapq import heappush, heappop
INF = 1<<55
# def trace(s, t, ancestors):
# route = [t]
# c = t
# while True:
# a = ancestors[c]
# assert a is not None, 'Failed to trace'
# route.append(a)
# if a == s:
# break
# c = ancestors[c]
# route.reverse()
# return route
# 経路復元の時はコメントアウト部分を解除
def dijkstra(N, G, s):
dist = [INF] * N
que = [(0, s)]
dist[s] = 0
while que:
c, v = heappop(que)
if dist[v] < c:
continue
for t, cost in G[v]:
if dist[v] + cost < dist[t]:
dist[t] = dist[v] + cost
heappush(que, (dist[t], t))
return dist
d1 = dijkstra(N, G, GOAL)
ret = []
now = START
while now!=GOAL:
mins = INF
ret.append(now)
for v,c in G[now]:
if dist[v] + c == dist[now]:
mins = min(mins, v)
now = mins
ret.append(GOAL)
print(*ret)
akasia_midori