最短路的模板
import math
import heapq
n = 2021
g = [[0] * (n + 1) for _ in range(n + 1)]
def lcm(x, y):
return x * y // math.gcd(x, y)
for i in range(1, n + 1): # 初始化
for j in range(1, n + 1):
if abs(i - j) <= 21:
w = lcm(i, j)
g[i][j] = w
g[j][i] = w
st = [0] * (n + 1)
dist = [math.inf] * (n + 1) # 初始化为inf
heap = []
def dijkstra():
dist[1] = 0
heapq.heappush(heap, (0, 1))
while heap:
(d, v) = heapq.heappop(heap)
if st[v]:
continue
st[v] = 1
for i in range(1, n + 1):
if g[v][i]:
if dist[i] > dist[v] + g[v][i]:
dist[i] = dist[v] + g[v][i]
heapq.heappush(heap, (dist[i], i))
print(dist[2021])
dijkstra()
0 回复
0 转发
0 喜欢
1 阅读



