DonHurry

[Python] ๋ฐฑ์ค€ 1753๋ฒˆ - ์ตœ๋‹จ๊ฒฝ๋กœ ๋ณธ๋ฌธ

Problem Solving

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

_๋„๋… 2022. 11. 30. 00:51

๐Ÿ“– ๋ฌธ์ œ

 

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

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

www.acmicpc.net

 

๐Ÿ”Ž ํ’€์ด

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

 

๐Ÿ’ป ์ฝ”๋“œ

import sys
import collections
import heapq
input = sys.stdin.readline

V, E = map(int, input().split())
graph = collections.defaultdict(list)
start = int(input())
for _ in range(E):
    u, v, w = map(int, input().split())
    graph[u].append((v, w))

q = [(0, start)]
# ๊ฐ ์ •์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅ
dist = collections.defaultdict(int)
while q:
    time, node = heapq.heappop(q)
    # ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•˜๋Š” ์ •์ ์ผ ๊ฒฝ์šฐ ๋ฐฉ๋ฌธ
    if node not in dist:
        dist[node] = time
        for v, w in graph[node]:
            # ์ด์ „๊นŒ์ง€์˜ ํ•ฉ๊ณผ ํ˜„์žฌ ๊ฐ„์„ ์˜ ๋น„์šฉ ํ•ฉํ•˜๊ธฐ
            alt = time + w
            heapq.heappush(q, (alt, v))

for i in range(1, V+1):
    # ์‹œ์ž‘์ ์ธ ๊ฒฝ์šฐ
    if i == start:
        print(0)
    # ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
    elif dist[i]:
        print(dist[i])
    # ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    else:
        print("INF")