n,m = map(int,input().split())
prices = [0] + list(map(int,input().split()))
from collections import *
gl = defaultdict(list)
gr = defaultdict(list)
for _ in range(m):
u,v,t = map(int,input().split())
gl[u].append(v)
gr[v].append(u)
if t == 2:
gl[v].append(u)
gr[u].append(v)
from math import inf
def spfa(s,g,flag):
dis = [0]*(n + 1)
if flag:
dis = [inf]*(n + 1)
st = [0]*(n + 1)
st[s] = True
q = [s]
dis[s] = prices[s]
while q:
u = q.pop()
st[u] = 0 # 不在队列中
for v in g[u]:
if (flag and dis[v] > min(dis[u],prices[v]) ) or (not flag and dis[v] < max(dis[u],prices[v])):
dis[v] = min(dis[u],prices[v]) if flag else max(dis[u],prices[v])
# 这里一定注意,有更新,才入队
if not st[v]:
st[v] = 1
q.append(v)
return dis
ans = 0
d_min = spfa(1,gl,True)
d_max = spfa(n,gr,False)
for i in range(1,n + 1):
ans = max(ans,d_max[i] - d_min[i])
print(ans)
spfa求最短路
最新推荐文章于 2024-10-01 23:05:47 发布