DevYoon
[๋ฐฑ์ค] 1504. ํน์ ํ ์ต๋จ ๊ฒฝ๋ก (Python) ๋ณธ๋ฌธ
link ๐ https://www.acmicpc.net/problem/1504
๐ฅ ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ํต๊ณผํด์ผ ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฒฝ์ฐ๋ก ๋๋์ด ๊ณ์ฐํ์๋ค.
๐ฅ ์์์ โก๏ธ ์ ์ 1 โก๏ธ ์ ์ 2 โก๏ธ ๋์
๐ฅ ์์์ โก๏ธ ์ ์ 2 โก๏ธ ์ ์ 1 โก๏ธ ๋์
๐ฅ ๋ ๊ฒฝ์ฐ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ด ์ ๋ต!
import heapq
import sys
N, E = map(int, sys.stdin.readline().split())
board = [[] for _ in range(N+1)]
for _ in range(E):
a, b, c = map(int, sys.stdin.readline().split())
board[a].append((b, c))
board[b].append((a, c))
m1, m2 = map(int, sys.stdin.readline().split())
def dijkstra(start):
heap = []
heapq.heappush(heap, (0, start)) # ๋น์ฉ, ๊ฒฝ์ ์ง
result = [2e18] * (N + 1)
result[start] = 0
while heap:
cost, now = heapq.heappop(heap)
if cost > result[now]:
continue
for b in board[now]:
newcost = cost+b[1]
if newcost < result[b[0]]:
result[b[0]] = newcost
heapq.heappush(heap, (newcost, b[0]))
return result
# 1 -> m1 -> m2 -> N
# 1 -> m2 -> m1 -> N
res_one = dijkstra(1)
res_m1 = dijkstra(m1)
res_m2 = dijkstra(m2)
ans = min(res_one[m1]+res_m1[m2]+res_m2[N], res_one[m2]+res_m2[m1]+res_m1[N])
if ans < 2e18:
print(ans)
else:
print(-1)