~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/1504
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- v1 -> v2 ์์ ๋๋ v2 -> v1 ์์ ๊ฐ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ์ฌ ์์ ๊ฐ์ ์ถ๋ ฅํ๋ค. (2๋ฒ์ ๋ค์ต์คํธ๋ผ)
- ๊ฒฝ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ(๊ฒฐ๊ณผ ๊ฐ์ด INF๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ) -1์ ์ถ๋ ฅ
์์ธํ ๋ด์ฉ์ ์ฝ๋ ์ฃผ์ ์ฐธ๊ณ
์์ฑ ์ฝ๋
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
N, E = map(int, input().split()) # ๋
ธ๋์, ๊ฐ์ ์
graph = [[] for _ in range(N+1)] # ์ธ์ ๋ฆฌ์คํธ
distance2 = [INF]*(N+1) # v1์์ ๊ฐ ๋
ธ๋ ์ต์ ๊ฑฐ๋ฆฌ ์ ์ฅ
distance3 = [INF]*(N+1) # v2์์ ๊ฐ ๋
ธ๋ ์ต์ ๊ฑฐ๋ฆฌ ์ ์ฅ
for _ in range(E): # ์ธ์ ๋ฆฌ์คํธ(๋ฌด๋ฐฉํฅ)
a, b, w = map(int, input().split())
graph[a].append((b, w))
graph[b].append((a, w))
v1, v2 = map(int, input().split()) # ๋ฐ๋์ ์ง๋์ผ ํ ๋ ๋
ธ๋
def dijkstra(start, distance): # ๋ค์ต์คํธ๋ผ
q = []
distance[start] = 0
heapq.heappush(q, (0, start)) # ์ฐ์ ์์ ํ ์ด๊ธฐํ
while q: # ํ์ ๊ฐ์ด ์์ ๋
dist, now = heapq.heappop(q) # ๊ฑฐ๋ฆฌ๊ฐ ์ต์์ธ ๋
ธ๋
if distance[now] < dist: # ๋ฐฉ๋ฌธํ ๋
ธ๋
continue
for v, w in graph[now]:
cost = dist + w
if distance[v] > cost:
distance[v] = cost
heapq.heappush(q, (cost, v))
dijkstra(v1, distance2) # v1์ผ๋ก ๋ถํฐ ์ต์ ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ(distance2)
dijkstra(v2, distance3) # v2๋ก ๋ถํฐ ์ต์ ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ(distance3)
# distance2๋ v1์ distance3๋ v3์ ์ต์ ๊ฑฐ๋ฆฌ์ด๋ค.
# 1 -> v1 -> v2 -> N ๋๋ 1 -> v2 -> v1 -> N ์ค ์์ ๊ฐ์ ๊ตฌํ๋ค.
result = min(distance2[1] + distance3[N] + distance2[v2], distance3[1] + distance2[N] + distance3[v1])
print(-1 if result >= INF else result) # ๊ธธ์ด ์๋ค๋ฉด(INF๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด) -1 ๋ฐํ
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 14502 ์ฐ๊ตฌ์ | BFS (0) | 2023.05.20 |
---|---|
[Python] ๋ฐฑ์ค 4485 ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? | ๋ค์ต์คํธ๋ผ (0) | 2023.05.18 |
[Python] ๋ฐฑ์ค 13549 ์จ๋ฐ๊ผญ์ง 3 | ๋ค์ต์คํธ๋ผ (0) | 2023.05.17 |
[Python] ๋ฐฑ์ค 1916 ์ต์๋น์ฉ ๊ตฌํ๊ธฐ | ๋ค์ต์คํธ๋ผ | ์๊ฐ์ด๊ณผ (0) | 2023.05.17 |
[Python] ๋ฐฑ์ค 11404 ํ๋ก์ด๋ | ํ๋ก์ด๋ ์์ (0) | 2023.05.16 |