import sys
from math import inf
RI = lambda: int(sys.stdin.readline().strip())
RS = lambda: sys.stdin.readline().strip()
RII = lambda: map(int, sys.stdin.readline().strip().split())
RILIST = lambda: list(RII())
N = 210
K,m,s,e = RII()
n = 2
idx = {s:1,e:2}
s,e = 1,2
g = [[inf]*N for _ in range(N)]
res = [[inf]*N for _ in range(N)]
def mul(c, a, b):
tmp = [[inf]*N for _ in range(N)]
for k in range(1,n + 1):
for i in range(1,n + 1):
for j in range(1,n + 1):
tmp[i][j] = min(tmp[i][j],a[i][k] + b[k][j])
# 注意这里 a,b,c 可能是同一个矩阵
for i in range(1, n + 1):
for j in range(1, n + 1):
c[i][j] = tmp[i][j]
# 快速幂
def qmi():
global res,K,g
for i in range(1,n + 1):
res[i][i] = 0 # 经过0条边
while K:
if K & 1:
mul(res,res,g)
mul(g,g,g)
K >>= 1
for _ in range(m):
c,a,b = RII()
if a not in idx:
n += 1
idx[a] = n
if b not in idx:
n += 1
idx[b] = n
a,b = idx[a],idx[b]
g[a][b] = g[b][a] = min(g[a][b],c)
qmi()
print(res[s][e])
恰好经过K条边的两点间最短路
最新推荐文章于 2024-10-01 05:04:32 发布