โ๋ฌธ์
https://www.acmicpc.net/problem/1504

๋ฉ๋ชจ๋ฆฌ: 126204 KB, ์๊ฐ: 376 ms
๊ทธ๋ํ ์ด๋ก , ์ต๋จ ๊ฒฝ๋ก, ๋ฐ์ดํฌ์คํธ๋ผ
๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ค. ์ธ์ค์ด๋ 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ์ต๋จ ๊ฑฐ๋ฆฌ๋ก ์ด๋ํ๋ ค๊ณ ํ๋ค. ๋ํ ์ธ์ค์ด๋ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด์ ์ด๋ํ๋ ํน์ ํ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ณ ์ถ์๋ฐ, ๊ทธ๊ฒ์ ๋ฐ๋ก ์์๋ก ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ํต๊ณผํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ธ์ค์ด๋ ํ๋ฒ ์ด๋ํ๋ ์ ์ ์ ๋ฌผ๋ก , ํ๋ฒ ์ด๋ํ๋ ๊ฐ์ ๋ ๋ค์ ์ด๋ํ ์ ์๋ค. ํ์ง๋ง ๋ฐ๋์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํด์ผ ํ๋ค๋ ์ฌ์ค์ ์ฃผ์ํ๋ผ. 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ์ด๋ํ ๋, ์ฃผ์ด์ง ๋ ์ ์ ์ ๋ฐ๋์ ๊ฑฐ์น๋ฉด์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
โ๐ปํ์ด
์ฐ์ ์ฃผ์ด์ง ๊ทธ๋ํ๊ฐ ๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ์ด๋ฏ๋ก ๊ฐ์ ์ ์๋ฐฉํฅ ๋ชจ๋ ๊ธฐ๋กํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ๋กํ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ฃผ์ด์ง ๋ ์ ์ ์ ์ง๋๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ด๋ํ๋ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
๋ ์ ์ ์ ์ง๋๋ ๊ฒฝ๋ก๋ 1 โก๏ธ v1 โก๏ธ v2 โก๏ธ N, 1 โก๏ธ v2 โก๏ธ v1 โก๏ธ N ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก 1 โก๏ธ v1, v1 โก๏ธ v2, v2 โก๏ธ N ๊ณผ 1 โก๏ธ v2, v2 โก๏ธ v1, v1 โก๏ธ N ๊ฐ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํด์ ์ถ๋ ฅํ๋ฉด ๋๋ค. ์ด๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ์ ๋ INF๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฌ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
๐ป์ฝ๋
import sys
from heapq import heappush, heappop
input = sys.stdin.readline
INF = 1e9
N, E = map(int, input().split())
edges = [[] for _ in range(N)]
for _ in range(E):
a, b, c = map(int, input().split())
edges[a-1].append((b-1, c))
edges[b-1].append((a-1, c))
v1, v2 = map(int, input().split())
def dijkstra(start, end):
dist = [INF] * N
move = [(0, start)]
dist[start] = 0
while move:
d, v = heappop(move)
for u, c in edges[v]:
if dist[u] > d + c:
dist[u] = d + c
heappush(move, (d + c, u))
return dist[end]
# 1 -> v1 -> v2 -> N
c1 = dijkstra(0, v1-1) + dijkstra(v1-1, v2-1) + dijkstra(v2-1, N-1)
# 1 -> v2 -> v1 -> N
c2 = dijkstra(0, v2-1) + dijkstra(v2-1, v1-1) + dijkstra(v1-1, N-1)
print(-1) if c1 >= INF and c2 >= INF else print(min(c1, c2))
๐ํ๊ธฐ

๋๋ ์ ๊ตฌํ๋ ๊ฒ ๊น์ง๋ ์๊ฐํ๋๋ฐ ์ค๊ฐ์ ํค๋งค์ ํธ๋๋ฐ ์ค๋ ๊ฑธ๋ ธ๋ค...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐฑ์ค] 13549. ์จ๋ฐ๊ผญ์ง3/Python - Gold5 (0) | 2025.08.15 |
|---|---|
| [๋ฐฑ์ค] 11657. ํ์๋จธ์ /Python - Gold4 (1) | 2025.08.14 |
| [๋ฐฑ์ค] 9655. ๋ ๊ฒ์/Python - Silver5 (2) | 2025.08.11 |
| [๋ฐฑ์ค] 2630. ์์ข ์ด ๋ง๋ค๊ธฐ/Python - Silver2 (0) | 2025.08.10 |
| [๋ฐฑ์ค] 11404. ํ๋ก์ด๋/Python - Gold4 (0) | 2025.08.07 |