๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Python] ๋ฐฑ์ค€ 1054 ๋ณธ๋ฌธ

import heapq
import sys
input = sys.stdin.readline

def dijkstra(start_node):
    queue = []
    min_dist = [1e9] * (n + 1)
    heapq.heappush(queue, [0, start_node])
    min_dist[start_node] = 0
    while queue:
        current_dist, current_node = heapq.heappop(queue)
        for next_node, weight in graph[current_node]:
            cost = min_dist[current_node] + weight
            if cost < min_dist[next_node]:
                min_dist[next_node] = cost
                heapq.heappush(queue, [cost, next_node])

    return min_dist

n,e = map(int, input().split())
graph = [[] for _ in range(n+1)]
for i in range(e):
    a, b, c= map(int, input().split())
    graph[a].append([b,c])
    graph[b].append([a, c])
v1, v2 = map(int, input().split())


def solve():
    from_1 = dijkstra(1)
    from_v1 = dijkstra(v1)
    from_v2 = dijkstra(v2)

    path1 = from_1[v1] + from_v1[v2] + from_v2[n]
    path2 = from_1[v2] + from_v2[v1] + from_v1[n]

    result = min(path1, path2)

    if result < 1e9:
        return result
    else:
        return -1

print(solve())

 

๋‹ค์ต์ŠคํŠธ๋ผ์—์„œ ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์„œ ํ’€๋ฉด ๋˜๋Š” ์‰ฝ๊ณ  ์–ด๋ ค์šด ๋ฌธ์ œใ…Žใ…Ž

1 -> v1 -> v2 -> n ๊นŒ์ง€์˜ ๊ฒฝ์šฐ์™€

1 -> v2 -> v1 -> n ๊นŒ์ง€ ๊ฒฝ์šฐ ์ค‘์—์„œ ์ตœ์†Œ๋น„์šฉ์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.