๐ ๋ฌธ์
๋ฐฉํฅ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์ฃผ์ด์ง ์์์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 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 sys, heapq
input = sys.stdin.readline
V,E = map(int,input().split()) # ๋
ธ๋์ ๊ฐ์
k=int(input()) # ์์ ๋
ธ๋
# ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ
graph=[[] for _ in range(V+1)]
for _ in range(E):
e,v,w=map(int,input().split())
graph[e].append([w,v]) # [๊ฐ์ค์น, ๋
ธ๋]
def dijkstra(start):
INF=1e9
visited=[INF]*(V+1) # ๋ฌดํ์ผ๋ก ์ด๊ธฐํ
visited[start]=0 # ์์ ๋
ธ๋ ๊ฐ์ค์น๋ 0
q=[[0,start]] # [๊ฐ์ค์น, ๋
ธ๋]
while q:
cost,node=heapq.heappop(q)
if cost > visited[node]: # ํ์ฌ ์ด๋ํ๊ณ ์ ํ๋ ๊ฒฝ๋ก์ ๋น์ฉ์ด ์ด์ ๋น์ฉ๋ณด๋ค ํฌ๋ค๋ฉด ๊ฐ์ง์์
continue
for k,u in graph[node]:
if visited[u] > visited[node]+k: # ์ด๋ ๋น์ฉ์ด ์๋ค๋ฉด
visited[u] = visited[node]+k # ๊ทธ๋ ๊ฒ ์ด๋
heapq.heappush(q,[visited[u], u]) # ์ฐํ์ ์ฝ์
return visited[1:] # 0๋ฒ์งธ ์ธ๋ฑ์ค ์ ์ธ
for ans in dijkstra(k):
print(ans if ans!=1e9 else 'INF')
๐ญ ์ํ์ฐฉ์ค
ํ๋ฆฐ ์ด์ ๋ ์์ ์ ์ ์ ๋ฌด์กฐ๊ฑด 1๋ก ๋์์๋ค..ใ
๋ฐ๋ก ๋ช๊ฐ ๋๋ ค๋ณด๋๋ฐ ์ด์ํ ๊ฐ์ด ๋์ ์ฝ๋๋ฅผ ํ ๋ฒ ๋ ์ดํด๋ณด๋ค๊ฐ ๋ฐ๊ฒฌํ๋ค.
๐ ๋ฌธ์ ๋งํฌ ์ต๋จ๊ฒฝ๋ก
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1865๋ฒ: ์ํ - ํ์ด์ฌ (2) | 2022.08.06 |
---|---|
[๋ฐฑ์ค] 9019๋ฒ: DSLR - ํ์ด์ฌ (0) | 2022.08.03 |
[๋ฐฑ์ค] 2470๋ฒ: ๋ ์ฉ์ก (0) | 2022.07.28 |
[๋ฐฑ์ค] 1043๋ฒ: ๊ฑฐ์ง๋ง - ํ์ด์ฌ (0) | 2022.07.26 |
[๋ฐฑ์ค] 10026๋ฒ: ์ ๋ก์์ฝ - ํ์ด์ฌ (0) | 2022.07.14 |