~๋ชฉ์ฐจ~
๋ฌธ์
https://www.acmicpc.net/problem/1753
๋ฌธ์ ํด๊ฒฐ ํฌ์ธํธ
- ๋ํ์ ์ธ ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์
- ์์๋ ธ๋๋ถํฐ ๊ฐ ๋ ธ๋๊น์ง ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด(distance)์ ๋ฌดํ์(INF)๋ก ์ด๊ธฐํ
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ graph๋ฅผ ์ ์ธํ์ฌ ๊ฐ ๋ ธ๋์ ์ฐ๊ฒฐ ์ฌ๋ถ์ ๋ฌด๊ฒ๋ฅผ ํ๋ธํํ๋ก ์ ์ฅ
: graph[i][0]์ i์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ์๋ฏธํ๊ณ graph[i][1]์ i์ graph[i][0] ๋ ธ๋์ ๊ฐ์ ๊ธธ์ด๋ฅผ ์๋ฏธํจ
- ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ํจ์์์ ์์ ๋ ธ๋(start)์ distance๋ 0์ผ๋ก ์ด๊ธฐํ
- ์ฐ์ ์์ ํ(priority queue)๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ์ ๊ธธ์ด๊ฐ ์งง์ ๊ฒ ๋ถํฐ ์ฒ๋ฆฌ
- ๊ฐ์ ๊ธธ์ด๊ฐ ๊ฐ์ฅ ์งง์ ๋ ธ๋(now)์ ๊ฑฐ๋ฆฌ(distance[now])๊ฐ ์ด๋ฏธ ๋ ์๋ค๋ฉด ๊ณ์ฐํ์ง ์๋๋ค.
- ๋ฐ๋๋ก ํฌ๋ค๋ฉด ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ์ด๋ฏ๋ก ํด๋น ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋ํด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์งง๋ค๋ฉด
distance๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ฐ์ ์์ ํ์๋ ์ฝ์ ํ๋ค.
- ์ฐ์ ์์ ํ๋ฅผ ๋ชจ๋ ๋๊ณ ๋๋ฉด distance์๋ start ๋ ธ๋๋ก๋ถํฐ ๊ฐ ๋ ธ๋๋ก์ ๊ฐ์ฅ ์งง์ ๊ธธ์ด๊ฐ ์ ์ฅ๋์ด ์๋ค.
์์ฑ ์ฝ๋
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
n, m = map(int, input().split())
start = int(input())
graph = [[]*(n+1) for _ in range(n+1)]
distance = [INF]*(n+1)
for i in range(m):
v1, v2, w = map(int, input().split())
graph[v1].append((v2, w)) # v1์์ v2๋ก w๊ฑฐ๋ฆฌ
def dijkstra(start):
q = []
distance[start] = 0
heapq.heappush(q, (0, start))
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = i[1] + dist
if distance[i[0]] > cost:
heapq.heappush(q, (cost, i[0]))
distance[i[0]] = cost
dijkstra(start)
for i in range(1, n+1):
if distance[i] == INF:
print("INF")
else:
print(distance[i])
๋์์ด ๋์ จ๋ค๋ฉด ์ข์์ ๋๋ฌ์ฃผ์ธ์๐
'๐๋ฌธ์ ํ์ด > ๐งฉBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 11404 ํ๋ก์ด๋ | ํ๋ก์ด๋ ์์ (0) | 2023.05.16 |
---|---|
[Python] ๋ฐฑ์ค 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ | ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.05.16 |
[Python] ๋ฐฑ์ค 1463 1๋ก ๋ง๋ค๊ธฐ | DP (0) | 2023.05.15 |
[Python] ๋ฐฑ์ค 9663 N-Queen | ์๊ฐ์ด๊ณผ (2) | 2023.04.18 |
[Python] ๋ฐฑ์ค 10819 ์ฐจ์ด๋ฅผ ์ต๋๋ก | ์์ด/์กฐํฉ | Permutations/Combinations (0) | 2023.03.02 |