[๋ฐฑ์ค/python] 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๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ ๋ต
import heapq
import sys
input = sys.stdin.readline
V, E = map(int, input().split())
K = int(input())
INF = int(1e9)
point = [INF]*(V+1)
graph = {n:[] for n in range(1, V+1)} # ์์ ๋
ธ๋ : [(๋์ฐฉ ๋
ธ๋, ๊ฐ์ค์น)]
for _ in range(E):
u, v, w = map(int, input().split())
graph[u].append((v,w))
def dijkstra(n):
queue = []
heapq.heappush(queue, (0, n))
point[n] = 0
while queue:
start, end = heapq.heappop(queue)
if point[end] < start:
continue
for node in graph[end]:
cost = start + node[1]
if cost < point[node[0]]:
point[node[0]] = cost
heapq.heappush(queue, (cost, node[0]))
dijkstra(K)
for p in point[1:]:
if p == INF:
print("INF")
else:
print(p)
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 1987๋ฒ : ์ํ๋ฒณ (0) | 2021.09.16 |
---|---|
[๋ฐฑ์ค/python] 1927๋ฒ : ์ต์ ํ (0) | 2021.09.06 |
[๋ฐฑ์ค/python] 12865๋ฒ : ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2021.08.30 |
[๋ฐฑ์ค/python] 9465๋ฒ : ์คํฐ์ปค (0) | 2021.08.28 |
[๋ฐฑ์ค/python] 3190๋ฒ : ๋ฑ (0) | 2021.08.28 |