[BOJ][๐ก5][๋ฐฑ์ค#01753] ์ต๋จ๊ฒฝ๋ก
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ฐฉํฅ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์ฃผ์ด์ง ์์์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 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๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์์
์ ๋ ฅ
5 6
1
5 1 1
1 2 2
1 3 3
2 3 4
2 4 5
3 4 6
์ถ๋ ฅ
0
2
3
7
INF
My Sol
import sys
input = sys.stdin.readline
from heapq import heappop, heappush
def dijk(S):
global D
Q = [(D[S], S)]
visit = [0]*(V+1)
while Q:
d, u = heappop(Q)
if visit[u]: continue
visit[u] = 1
for v, w in G[u]:
if not visit[v] and D[v] > D[u]+w:
D[v] = D[u]+w
heappush(Q, [D[v], v])
V, E = map(int, input().split())
S = int(input())-1
G = [[] for _ in range(V)]
D = [0xffffff]*V
D[S] = 0
for _ in range(E):
u, v, w = map(int, input().split())
G[u-1].append((v-1, w))
dijk(S)
for val in D:
print('INF' if val == 0xffffff else val)
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ํธ๋ ๋ฌธ์ ์๋ค. ์์์ ์ ํจ์ ์ธ์๋ก ๋ฐ์ ์์ํ๋ค. ์์์ ์ผ๋ก๋ถํฐ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ชจ๋ ๊ณ์ฐํ์ฌ D์ ๋ฃ์ผ๋ฉด, D๋ฅผ ์ฐจ๋ก๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋๋ฐ, ์ด๋ ์ด๊ธฐํํ๋ ๊ฐ์ด๋ผ๋ฉด INF๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๊ฒ ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ