๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/Shortest Path

[๋ฐฑ์ค€]1753๋ฒˆ: ์ตœ๋‹จ๊ฒฝ๋กœ

by syLim___ 2023. 2. 28.
728x90

https://www.acmicpc.net/problem/1753

 

1753๋ฒˆ: ์ตœ๋‹จ๊ฒฝ๋กœ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ V์™€ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ E๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) ๋ชจ๋“  ์ •์ ์—๋Š” 1๋ถ€ํ„ฐ V๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์‹œ์ž‘ ์ •์ ์˜ ๋ฒˆํ˜ธ K(1 ≤ K ≤ V)๊ฐ€

www.acmicpc.net


๋ชจ๋“  ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์กŒ์œผ๋ฏ€๋กœ, ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์ •์ ์˜  ๊ฐœ์ˆ˜์™€ ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ๋งค์šฐ ๋งŽ์œผ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

https://catromi.tistory.com/65

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ (python)

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Dijkstra Algorithm) -ํŠน์ • ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐ -๋งค ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ์ ๊ฒŒ ๋“œ๋Š” ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค (๊ทธ๋ฆฌ๋””

catromi.tistory.com

์ด๊ฑฐ ๊ทธ๋Œ€๋กœ ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ’๋งŒ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ์•„์ฃผ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ!

 


import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)

v,e = map(int,input().split())
k = int(input())
graph=[[] for _ in range(v+1)]

for _ in range(e):
  a,b,c = map(int,input().split())
  graph[a].append((b,c))

distance = [INF]*(v+1)

#์šฐ์„ ์ˆœ์œ„ํ์— ์ถœ๋ฐœ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…
q=[]
heapq.heappush(q,(0,k))
distance[k]=0
#dijkstra
while q:
  dist, cur = heapq.heappop(q)

  if distance[cur] < dist:
    continue
  for i in graph[cur]:
    cost = dist + i[1]
    if cost < distance[i[0]]:
      distance[i[0]] = cost
      heapq.heappush(q,(cost,i[0]))

#๊ฒฐ๊ณผ ์ถœ๋ ฅ
for i in range(1,v+1):
  if distance[i]==INF:
    print("INF")
  else:
    print(distance[i])
728x90