45 lines
892 B
Python
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) |