結果

問題 No.160 最短経路のうち辞書順最小
ユーザー ntuda
提出日時 2025-01-03 23:52:45
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 133 ms / 5,000 ms
コード長 814 bytes
コンパイル時間 159 ms
コンパイル使用メモリ 82,564 KB
実行使用メモリ 82,800 KB
最終ジャッジ日時 2025-01-03 23:55:01
合計ジャッジ時間 3,889 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

from heapq import *

def dijkstra(start, goal):
    D[start] = 0
    q = []
    heappush(q, (0, start))

    while len(q) > 0:
        d, u = heappop(q)
        #if u == goal:
        #    return
        if d > D[u]: continue
        for v, c in E[u]:
            if D[v] == D[u] + c:
                if P[v] > (P[u] + [v]):
                    P[v] = (P[u] + [v])
            if D[v] > D[u] + c:
                D[v] = D[u] + c
                heappush(q, (D[v], v))
                P[v] = (P[u] + [v])
    return []

N,M,S,G = map(int,input().split())
ABC = [list(map(int,input().split())) for _ in range(M)]
E = [[] for _ in range(N + 1)]
for a, b, c in ABC:
    E[a].append([b, c])
    E[b].append([a, c])
INF = 10 ** 7
D = [INF] * (N + 1)
P = [[] for _ in range(N + 1)]
P[S] = [S]
dijkstra(S, G)
print(*P[G])
0