2025-10-20 20:54:26 +09:00

45 lines
892 B
Python

import heapq
n, m = map(int, [input(), input()])
graph = [[] for _ in range(n+1)]
for _ in range(m) :
u, v, w = map(int, input().split())
graph[u].append((v,w))
start, end = map(int, input().split())
inf = float("inf")
distance = [inf for _ in range(n+1)]
distance[start] = 0
prevNode = [0]*(n+1)
heap = []
heapq.heappush(heap, (0, start))
while len(heap) != 0 :
cur_dist, now = heapq.heappop(heap)
if distance[now] < cur_dist :
continue
for Next in graph[now] :
next, nw = Next
if distance[next] > distance[now] + nw :
distance[next] = distance[now] + nw
heapq.heappush(heap, (distance[next], next))
prevNode[next] = now
channel = [end]
ptr = end
while ptr != start :
ptr = prevNode[ptr]
channel.append(ptr)
channel.reverse()
print(distance[end])
print(len(channel))
print(*channel)