๐กsolutions )
๐ฌ ์ด๋ฒ ๋ฌธ์ ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ํ ๋ ๊ฐ์ฅ ๋ํ์ ์ธ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ํด๊ฒฐํ๋ค.
๐ฌ heap ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉํ์ฌ heappop()์ ํ์ ๋ ๊ฐ์ฅ ์ต๋จ ๊ฒฝ๋ก๊ฐ ๋์ค๊ฒ ํ๋ค.
๐ซcode )
import heapq
import sys
input = sys.stdin.readline
def dijkstra(v, s, adj):
dist = [INF] * (v + 1) # ์ต๋จ๊ฒฝ๋ก ๋ฆฌ์คํธ
dist[s] = 0
heap = []
heapq.heappush(heap, [0, s])
while heap:
cost, node = heapq.heappop(heap) # ์ต์ํ ์ด์ฉ
for n, c in adj[node]:
c += cost
if c < dist[n]:
dist[n] = c
heapq.heappush(heap, [c, n])
return dist
V, E = map(int, input().split())
s = int(input())
adj = [[] for _ in range(V + 1)]
INF = float('inf') # ์ด๊ธฐ๊ฐ์ ๋ฌดํ๋
for i in range(E): # ์ธ์ ๋ฆฌ์คํธ
u, v, w = map(int, input().split())
adj[u].append([v, w])
for res in dijkstra(V, s, adj)[1:]:
print(res if res != INF else 'INF')
๐ description )
๋ฌธ์ ์ถ์ฒ : www.acmicpc.net/problem/1753
๋ฌธ์ ๋ฐฉํฅ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์ฃผ์ด์ง ์์์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 10 ์ดํ์ ์์ฐ์์ด๋ค. ์ ๋ ฅ์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ V์ ๊ฐ์ ์ ๊ฐ์ E๊ฐ ์ฃผ์ด์ง๋ค. (1≤V≤20,000, 1≤E≤300,000) ๋ชจ๋ ์ ์ ์๋ 1๋ถํฐ V๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ๋์งธ ์ค์๋ ์์ ์ ์ ์ ๋ฒํธ K(1≤K≤V)๊ฐ ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค๋ถํฐ E๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ๊ฐ์ ์ ๋ํ๋ด๋ ์ธ ๊ฐ์ ์ ์ (u, v, w)๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ์ด๋ u์์ v๋ก ๊ฐ๋ ๊ฐ์ค์น w์ธ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ ๋ป์ด๋ค. u์ v๋ ์๋ก ๋ค๋ฅด๋ฉฐ w๋ 10 ์ดํ์ ์์ฐ์์ด๋ค. ์๋ก ๋ค๋ฅธ ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์กด์ฌํ ์๋ ์์์ ์ ์ํ๋ค. ์ถ๋ ฅ์ฒซ์งธ ์ค๋ถํฐ V๊ฐ์ ์ค์ ๊ฑธ์ณ, i๋ฒ์งธ ์ค์ i๋ฒ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก์ ๊ฒฝ๋ก๊ฐ์ ์ถ๋ ฅํ๋ค. ์์์ ์์ ์ 0์ผ๋ก ์ถ๋ ฅํ๊ณ , ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ INF๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค. |