Official

D - 往復配達 / Round-Trip Delivery Editorial by sounansya Editorial for printing


与えられるグラフは無向グラフであるため、頂点 \(1\) から頂点 \(T\) までの最短距離と頂点 \(T\) から頂点 \(1\) までの最短距離は一致します。したがって、頂点 \(1\) から頂点 \(T\) までの最短経路の距離の \(2\) 倍が求める答えとなります。

この最短距離はダイクストラ法で求めることができます。

実装例(Python3)

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)

posted:
last update: