commit
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
6 9
|
||||
3 4
|
||||
2 17 8 6 9 3
|
||||
1 2 6
|
||||
1 3 10
|
||||
1 4 21
|
||||
2 3 5
|
||||
2 5 7
|
||||
3 6 11
|
||||
4 5 31
|
||||
4 6 4
|
||||
5 6 28
|
||||
@@ -0,0 +1,51 @@
|
||||
import math
|
||||
from queue import PriorityQueue
|
||||
|
||||
|
||||
def read_idx(x: str):
|
||||
return int(x) - 1
|
||||
|
||||
|
||||
def inputs() -> list[str]:
|
||||
return input().strip(" ").split(" ")
|
||||
|
||||
|
||||
V, E = map(int, inputs())
|
||||
s, t = map(read_idx, inputs())
|
||||
vw = list(map(int, inputs())) # vertex weight
|
||||
graph = [[] for _ in range(V)]
|
||||
for _ in range(E):
|
||||
u, v, w = map(read_idx, inputs())
|
||||
w += 1
|
||||
graph[u].append((v, w))
|
||||
graph[v].append((u, w))
|
||||
|
||||
newgraph = [[] for _ in range(V)]
|
||||
|
||||
for u in range(V):
|
||||
for v, w in graph[u]:
|
||||
newgraph[u].append((v, vw[u] + w))
|
||||
|
||||
|
||||
def dijstra(g: list[list[tuple[int, int]]], s: int, t: int) -> float:
|
||||
dist = [math.inf] * V
|
||||
dist[s] = 0
|
||||
q = PriorityQueue()
|
||||
q.put((0, s))
|
||||
while not q.empty():
|
||||
d, u = q.get()
|
||||
if d != dist[u]:
|
||||
continue
|
||||
|
||||
# print(u, d)
|
||||
for v, w in g[u]:
|
||||
if dist[v] > dist[u] + w:
|
||||
dist[v] = dist[u] + w
|
||||
q.put((dist[v], v))
|
||||
|
||||
return dist[t]
|
||||
|
||||
|
||||
# print(vw, graph)
|
||||
# print(newgraph)
|
||||
print(dijstra(newgraph, s, t))
|
||||
Reference in New Issue
Block a user