結果

問題 No.160 最短経路のうち辞書順最小
コンテスト
ユーザー flippergo
提出日時 2026-10-17 09:31:59
言語 PyPy3
(8.0.0 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 3,962 ms / 5,000 ms
+ 143µs
コード長 946 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 80 ms
コンパイル使用メモリ 64,552 KB
実行使用メモリ 87,712 KB
最終ジャッジ日時 2026-10-17 09:32:08
合計ジャッジ時間 7,929 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import heapq
N,M,S,G = map(int,input().split())
F = {i:[] for i in range(N)}
for _ in range(M):
    a,b,c = map(int,input().split())
    F[a].append((b,c))
    F[b].append((a,c))
INFTY = 10**7
dist = [INFTY]*N
visited = [False]*N
Pa = [-1]*N
def restore(u):
    seq = [u]
    x = u
    while x!=S:
        y = Pa[x]
        seq.append(y)
        x = y
    seq = seq[::-1]
    return seq
dist[S] = 0
heap = [(0,S)]
while heap:
    d,u = heapq.heappop(heap)
    if dist[u]<d:continue
    visited[u] = True
    for v,c in F[u]:
        if visited[v]:continue
        if dist[v]>d+c:
            dist[v] = d+c
            Pa[v] = u
            heapq.heappush(heap,(d+c,v))
        elif dist[v]==d+c:
            u1 = Pa[v]
            seq1 = restore(u1)
            seq1.append(v)
            seq = restore(u)
            seq.append(v)
            if seq<seq1:
                Pa[v] = u
                heapq.heappush(heap,(d+c,v))
print(*restore(G))
0