๐Ÿ“š Study/Algorithm

[Algorithm] ์ตœ๋‹จ ๊ฒฝ๋กœ

์œฐ๊ฐฑ 2025. 4. 5. 23:19

# 1. ๊ฐ€์žฅ ๋น ๋ฅธ ๊ธธ ์ฐพ๊ธฐ

์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ('๊ธธ ์ฐพ๊ธฐ')

๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ์ง€๋งŒ, ์ƒํ™ฉ์— ๋งž๋Š” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ด๋ฏธ ์ •๋ฆฝ๋˜์–ด ์žˆ๋‹ค.

 

์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋Š” ๋ณดํ†ต ๊ทธ๋ž˜ํ”„๋ฅผ ์ด์šฉํ•ด ํ‘œํ˜„ํ•˜๋Š”๋ฐ

๊ฐ ์ง€์ ์€ '๋…ธ๋“œ', ์ง€์  ๊ฐ„ ์—ฐ๊ฒฐ๋œ ๋„๋กœ๋Š” '๊ฐ„์„ '์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ๋ณด๋‹ค๋Š” ๋‹จ์ˆœํžˆ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ์ถœ์ œ๋œ๋‹ค. 

์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ํ•™๋ถ€ ์ˆ˜์ค€์—์„œ๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ, ๋ฒจ๋งŒ ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 3๊ฐ€์ง€๋ฅผ ๋ฐฐ์šด๋‹ค.

๋ณธ ์ฑ…์—์„œ๋Š” ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” ์œ ํ˜•์ธ ์ตœ๋‹จ ๊ฒฝ๋กœ์™€ ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ๋ฐฐ์šด๋‹ค.

๋”๋ถˆ์–ด, ์•ž์„œ ๊ณต๋ถ€ํ•œ ๊ทธ๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ตœ๋‹จ ๊ฒฝ๋กœ์— ๊ทธ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, ์ตœ๋‹จ ๊ฒฝ๋กœ๋Š” ๊ทธ๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•œ ์œ ํ˜•์ด๋‹ค.


๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์ต์Šคํƒ€(Dijkstra) ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜
: ๊ทธ๋ž˜ํ”„์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ํŠน์ •ํ•œ ๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ
  ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฐ๊ฐ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ 
: ์Œ์˜ ๊ฐ„์„ (0๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€์„ ๊ฐ€์ง€๋Š” ๊ฐ„์„ )์ด ์—†์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘

์ฐธ๊ณ ๋กœ, ํ˜„์‹ค์„ธ๊ณ„์˜ ๊ธธ(๊ฐ„์„ )์€ ์Œ์˜ ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‹ค์ œ๋กœ GPS ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ฑ„ํƒ๋˜๊ณ ๋Š” ํ•œ๋‹ค.

 

์•Œ๊ณ ๋ฆฌ์ฆ˜

1. ์ถœ๋ฐœ ๋…ธ๋“œ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
2. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
3. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.
4. ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
5. ์œ„ ๊ณผ์ •์—์„œ 3&4๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

ํ˜„์žฌ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฃผ๋ณ€ ๊ฐ„์„ ์„ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ 2๊ฐ€์ง€์ด๋‹ค.

๋ฐฉ๋ฒ• 1. ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ๋А๋ฆฌ๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ

๋ฐฉ๋ฒ• 2. ๊ตฌํ˜„ํ•˜๊ธฐ์— ์กฐ๊ธˆ ๋” ๊นŒ๋‹ค๋กญ์ง€๋งŒ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋‹ค๊ฐ€๋„ ์ผ์–ด๋‚˜์„œ ๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ [๋ฐฉ๋ฒ• 2] ์ฝ”๋“œ์— ์ˆ™๋‹ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.


๋™์ž‘ ์›๋ฆฌ

์˜ˆ๋ฅผ ๋“ค์–ด ์ถœ๋ฐœ ๋…ธ๋“œ๊ฐ€ 1์ผ ๋•Œ, 1๋ฒˆ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋กœ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด์ž.

์ดˆ๊ธฐ ์ƒํƒœ์—์„œ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ '๋ฌดํ•œ'์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

(์ฝ”๋“œ์—์„œ๋Š” ์ด๋ฅผ 1e9๋กœ ํ‘œ์‹œํ•˜๋Š”๋ฐ, ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ ์‹ค์ˆ˜ ์ž๋ฃŒํ˜•์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— int(1e9)๋กœ ์ดˆ๊ธฐํ™”)

 

step 0. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ ์„ ํƒ

(์ถœ๋ฐœ-์ถœ๋ฐœ: 0์œผ๋กœ ์„ค์ •)

 

step 1. 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ ๊ณ„์‚ฐ

1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ์˜ค๋Š” ๋น„์šฉ: 0

2๋ฒˆ (1๋ฒˆ->1๋ฒˆ + 1๋ฒˆ->2๋ฒˆ = 0 + 2) = 2

3๋ฒˆ (1๋ฒˆ->1๋ฒˆ + 1๋ฒˆ->3๋ฒˆ = 0 + 5) = 5

4๋ฒˆ (1๋ฒˆ->1๋ฒˆ + 1๋ฒˆ->4๋ฒˆ = 0 + 1) = 1

๊ทธ๋ฆฌ๊ณ  ์œ„์™€ ๊ฐ™์€  ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋” ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•˜์œผ๋ฏ€๋กœ, ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

step 2. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ ์„ ํƒ

2๋ฒˆ, 3๋ฒˆ, 4๋ฒˆ -> 4๋ฒˆ ๋…ธ๋“œ ์„ ํƒ๋จ

์ด์–ด์„œ, 4๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•œ๋‹ค.

3๋ฒˆ (1๋ฒˆ->4๋ฒˆ + 4๋ฒˆ->3๋ฒˆ = 1 + 3) = 4

5๋ฒˆ (1๋ฒˆ->4๋ฒˆ + 4๋ฒˆ->5๋ฒˆ = 1 + 1) = 2

์ด ๋‘ ๊ฐ’์€ ๊ธฐ์กด์˜ ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ฒจ ์žˆ๋˜ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ฐฑ์‹ ๋œ๋‹ค.

 

step 3. 2๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋จ (์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์„ ๋•Œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๋…ธ๋“œ ์„ ํƒ)

์ตœ๋‹จ ๊ฒฝ๋กœ 2์ธ 2๋ฒˆ ๋…ธ๋“œ์™€ 5๋ฒˆ ๋…ธ๋“œ ์ค‘, 2๋ฒˆ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.

์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ๋Š” 2๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์นœ๋‹ค๊ณ  ํ•ด๋„ ์ตœ์†Ÿ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š์•„ ๊ฐฑ์‹ ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

step 4. 5๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋จ

5๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋˜๊ณ , 6๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฐ’๋„ ๊ฐฑ์‹ ๋œ๋‹ค.

6๋ฒˆ (1๋ฒˆ->5๋ฒˆ + 5๋ฒˆ->6๋ฒˆ = 2 + 2) = 4

 

step 5. 3๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋จ

3๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋˜๊ณ , ๋™์ผํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

step 6. 6๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋จ

6๋ฒˆ ๋…ธ๋“œ๊ฐ€ ์„ ํƒ๋˜๊ณ , ๋™์ผํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 


๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ '๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒ'ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์„ ํƒ๋œ ๋…ธ๋“œ๋Š” '์ตœ๋‹จ ๊ฑฐ๋ฆฌ'๊ฐ€ ์™„์ „ํžˆ ์„ ํƒ๋œ ๋…ธ๋“œ์ด๋ฏ€๋กœ, ๋” ์ด์ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ˜๋ณตํ•ด๋„ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์‹œ ๋งํ•ด, ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ง„ํ–‰๋˜๋ฉด์„œ ํ•œ ๋‹จ๊ณ„๋‹น ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ํ™•์‹คํžˆ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•œ๋‹ค.

 

๋ฐฉ๋ฒ•1. ๊ฐ„๋‹จํ•œ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•ด๋ณด์ž.

๊ฐ„๋‹จํ•œ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ $O(V^2)$์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋‹ค์ต์ŠคํŠธ๋ผ์— ์˜ํ•ด์„œ ์ฒ˜์Œ ๊ณ ์•ˆ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

์—ฌ๊ธฐ์„œ $V$๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ง๊ด€์ ์ด๊ณ  ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜์Œ์— ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๋‹ด๋Š” 1์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

์ดํ›„์— ๋‹จ๊ณ„๋งˆ๋‹ค '๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ

์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ์„ ํƒ'ํ•˜๊ธฐ ์œ„ํ•ด ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค 1์ฐจ์› ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ํ™•์ธ(์ˆœ์ฐจ ํƒ์ƒ‰)ํ•œ๋‹ค. 

 

'์ตœ๋‹จ ๊ฒฝ๋กœ'๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด ์•„๋ž˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋Œ€์ฒด๋กœ ํŠน์ •ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ํŠน์ •ํ•œ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋งŒ์„ ์ถœ๋ ฅํ•˜๋„๋ก ์š”์ฒญํ•˜๋ฏ€๋กœ,

์ด๋ฒˆ ์žฅ์—์„œ '์ตœ๋‹จ ๊ฒฝ๋กœ'๊นŒ์ง€ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ๋‚ด์šฉ์€ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค.

 

import sys

# ๋ฐฑ์ค€์—์„œ๋Š” sys.stdin.readline()์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋กœ์ปฌ์—์„œ๋Š” input.txt ํŒŒ์ผ์„ ์ฝ๋„๋ก ๋ณ€๊ฒฝ
sys.stdin = open("input.txt", "r")
INF = int(1e9)

# ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ ์ž…๋ ฅ ๋ฐ›๊ธฐ๊ธฐ
n, m = map(int, sys.stdin.readline().split())
# ์‹œ์ž‘ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ธฐ
start = int(sys.stdin.readline())
# ๊ฐ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
graph = [[] for i in range(n+1)]
# ๋ฐฉ๋ฌธํ•œ ์ ์ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ชฉ์ ์˜ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
visited = [False] * (n + 1)
# ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ๋ฌดํ•œ์œผ๋กœ ์ดˆ๊ธฐํ™”)
distance = [INF] * (n + 1)

# ๋ชจ๋“  ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ธฐ
for _ in range(m):
    a, b, c = map(int, sys.readline().split())
    # a๋ฒˆ ๋…ธ๋“œ์—์„œ b๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์ด c๋ผ๋Š” ์˜๋ฏธ
    graph[a].append((b,c))

# ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ค‘์—์„œ, ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜ํ™˜
def get_smallest_node():
    min_value = INF
    index = 0 # ๊ฐ€์žฅ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๋…ธ๋“œ(์ธ๋ฑ์Šค)
    for i in range(1, n+1):
        if distance[i] < min_value and not visited[i]:
            min_value = distance[i]
            index = i
    return index

def dijkstra(start):
    # ์‹œ์ž‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์ดˆ๊ธฐํ™”
    distance[start] = 0
    visited[start] = True
    for j in graph[start]:
        distance[j[0]] = j[1]
    # ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ์ „์ฒด n-1๊ฐœ์˜ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต
    for i in range(n-1):
        # ํ˜„์žฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด์„œ, ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
        now = get_smallest_node()
        visited[now] = True
        # ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ ํ™•์ธ
        for j in graph[now]:
            cost = distance[now] + j[1]
            # ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ
            if cost < distance[j[0]]:
                distance[j[0]] = cost

# ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰
dijkstra(start)

# ๋ชจ๋“  ๋…ธ๋“œ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅ
for i in range(1, n+1):
    # ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋ฌดํ•œ(infinity)์ด๋ผ๊ณ  ์ถœ๋ ฅ
    if distance[i] == INF:
        print("INFINITY")
    # ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅ
    else:
        print(distance[i])