公式
D - 往復配達 / Round-Trip Delivery 解説
by
D - 往復配達 / Round-Trip Delivery 解説
by
sounansya
与えられるグラフは無向グラフであるため、頂点 \(1\) から頂点 \(T\) までの最短距離と頂点 \(T\) から頂点 \(1\) までの最短距離は一致します。したがって、頂点 \(1\) から頂点 \(T\) までの最短経路の距離の \(2\) 倍が求める答えとなります。
この最短距離はダイクストラ法で求めることができます。
from heapq import heappush, heappop
INF = 10**18
def dijkstra(G, s):
dist = [INF] * len(G)
dist[s] = 0
pq = [(0, s)]
while pq:
d, v = heappop(pq)
if d > dist[v]:
continue
for u, weight in G[v]:
nd = d + weight
if dist[u] > nd:
dist[u] = nd
heappush(pq, (nd, u))
return dist
n, m, t = map(int, input().split())
t -= 1
g = [[] for _ in range(n)]
for i in range(m):
a, b, c = map(int, input().split())
a, b = a - 1, b - 1
g[a].append((b, c))
g[b].append((a, c))
d = dijkstra(g, 0)
ans = d[t]
if ans == INF:
print(-1)
else:
print(2 * ans)
投稿日時:
最終更新:
