Official
D - 救急搬送ネットワーク / Emergency Transport Network Editorial
by
D - 救急搬送ネットワーク / Emergency Transport Network Editorial
by
harurun4635
頂点 \(S\) からの最短距離をすべての頂点 \(i\) について列挙すればよいです。
グラフは負辺がありませんから、dijkstra 法によって \(O((N + M) \log N)\) などで解くことができます。
実装例
from heapq import heappop, heappush
inf = 1 << 60
n, m, s = map(int, input().split())
s -= 1
e = [[] for i in range(n)]
for i in range(m):
u, v, w = map(int, input().split())
u -= 1
v -= 1
e[u].append((v, w))
e[v].append((u, w))
d = [inf] * n
d[s] = 0
que = [(0, s)]
while que:
nd, u = heappop(que)
if d[u] != nd: continue
for v, w in e[u]:
if nd + w < d[v]:
d[v] = nd + w
heappush(que, (nd + w, v))
ans = 0
for i in range(n):
if d[i] != inf:
ans += d[i]
print(ans)
posted:
last update: