import heapq
import sys
inf = float('inf')
def f():
n, m, s, d = map(int, sys.stdin.readline().split())
v = list(map(int, sys.stdin.readline().split()))
g = [[inf]*n for _ in range(n)]
dis = [inf for _ in range(n)]
pre = [i for i in range(n)]
vis = [False for _ in range(n)]
cnt = [0 for _ in range(n)]
sumv = [0 for _ in range(n)]
sumv[s] = v[s]
dis[s] = 0
cnt[s] = 1
for _ in range(m):
a, b, c = map(int, sys.stdin.readline().split())
g[a][b] = c
g[b][a] = c
h = []
heapq.heappush(h,(0,s))
while h:
jl,node = heapq.heappop(h)
if vis[node] == True:
continue
vis[node] = True
for node2 in range(n):
if vis[node2] == True:
continue
if dis[node] + g[node][node2] < dis[node2]:
dis[node2] = dis[node] + g[node][node2]
heapq.heappush(h,(dis[node2],node2))
cnt[node2] = cnt[node]
sumv[node2] = sumv[node] + v[node2]
pre[node2] = node
elif dis[node] + g[node][node2] == dis[node2]:
cnt[node2] += cnt[node]
if sumv[node] + v[node2] > sumv[node2]:
sumv[node2] = sumv[node] + v[node2]
pre[node2] = node
print("%d %d"%(cnt[d], sumv[d]))
path = []
while d!=s:
path.append(d)
d=pre[d]
path.append(s)
path.reverse()
print(*path)
f()
pta紧急救援pyhton版满分
于 2023-04-14 21:02:29 首次发布