[python] ๋ฐฑ์ค - 1916. ์ต์๋น์ฉ ๊ตฌํ๊ธฐ

๐ค๋ฌธ์ ํด๊ฒฐ
- G5 | ๋ค์ต์คํธ๋ผ, ๊ทธ๋ํ
ํ๋์ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๋ค์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ
๊ฐ์ , ์ต์ ๋ฑ๋ฑ ๋ง์ด ๋์ค๋ฉด ๋ค์ต์คํธ๋ผ?
๋์ ๊ฒฝ์ฐ ๋ค์ต์คํธ๋ผ๋ฅผ ํ ๋ ํญ์ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ๋ค. (ํ์ด์ฌ์ ํํ๋ฅผ ์ฌ์ฉ)
A ์์ ๊ฐ ์ ์๋ ๋ชจ๋ ์ ์ ๋ค์ ์ต์๋น์ฉ์ ๋ฆฌ์คํธ์ ๋ด์๋๊ณ
B ์ง์ ์ ๋ต์ผ๋ก ์ถ๋ ฅํ๋ค.
- ๋จผ์ (๊ฐ์ค์น, ์์์ )์ ํํ์ ๋ฃ๊ณ ์์ํ๋ค.
- ์์์ ์์ ๊ฐ ์ ์ ๊น์ง์ ๋น์ฉ์ ๊ฐ์ฅ ํฐ ๊ฐ(ํ์ด์ฌ์์ float('inf')๋ฅผ ๋ฃ์ด๋๊ณ ์์ํ๋ค.)
- ํํ์์ ๊ฐ์ ํ๋์ฉ ๊บผ๋ธ๋ค.
- ๊บผ๋ธ ์ ์ ์์ ์ด์ํ ์ ์ ๋ค ์ค์์ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๊ณ , ์ด์ํ ์ ์ ๊น์ง์ ๋น์ฉ๋ณด๋ค ํ์ฌ๋น์ฉ + ๊บผ๋ธ ์ ์ ์์ ์ด์ํ ์ ์ ๊น์ง์ ๊ฐ์ ๋น์ฉ์ด ์์ผ๋ฉด ๊ฐ ์ ์ ๊น์ง์ ๋น์ฉ์ ํ์ฌ๋น์ฉ + ๊บผ๋ธ ์ ์ ์์ ์ด์ํ ์ ์ ๊น์ง์ ๊ฐ์ ๋น์ฉ์ผ๋ก ์ ๋ฐ์ดํธํ๊ณ , ํํ์ ๋ฃ์ด์ค๋ค.
- ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋ฆฌ์คํธ์ ์์์ ์์ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต์๋น์ฉ์ด ๋ค์ด์์ ๊ฒ์ด๋ค.
๐จ

๐ป์์ค ์ฝ๋
import sys
import heapq as h
input = sys.stdin.readline
def dijkstra(S, E):
pq = []
h.heappush(pq, (0, S))
visited = [0] * (N + 1)
key = [float('inf')] * (N + 1)
key[S] = 0
while pq:
k, u = h.heappop(pq)
if visited[u]:
continue
visited[u] = 1
for nei_u, nei_k in adj[u]:
if not visited[nei_u] and k + nei_k < key[nei_u]:
key[nei_u] = k + nei_k
h.heappush(pq, (key[nei_u], nei_u))
print(key[E])
if __name__ == '__main__':
N = int(input()) # ๋์์ ๊ฐ์
M = int(input()) # ๋ฒ์ค์ ๊ฐ์
adj = {x + 1: [] for x in range(N)}
for bus in range(M):
s, e, k = map(int, input().split())
adj[s].append((e, k))
A, B = map(int, input().split())
dijkstra(A, B)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/1916
1916๋ฒ: ์ต์๋น์ฉ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N(1 โค N โค 1,000)์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ๋ฒ์ค์ ๊ฐ์ M(1 โค M โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค๋ถํฐ M+2์ค๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋จผ์ ์ฒ์์๋ ๊ทธ
www.acmicpc.net
๋ฌธ์
N๊ฐ์ ๋์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋์์์ ์ถ๋ฐํ์ฌ ๋ค๋ฅธ ๋์์ ๋์ฐฉํ๋ M๊ฐ์ ๋ฒ์ค๊ฐ ์๋ค. ์ฐ๋ฆฌ๋ A๋ฒ์งธ ๋์์์ B๋ฒ์งธ ๋์๊น์ง ๊ฐ๋๋ฐ ๋๋ ๋ฒ์ค ๋น์ฉ์ ์ต์ํ ์ํค๋ ค๊ณ ํ๋ค. A๋ฒ์งธ ๋์์์ B๋ฒ์งธ ๋์๊น์ง ๊ฐ๋๋ฐ ๋๋ ์ต์๋น์ฉ์ ์ถ๋ ฅํ์ฌ๋ผ. ๋์์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ N(1 โค N โค 1,000)์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ๋ฒ์ค์ ๊ฐ์ M(1 โค M โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค๋ถํฐ M+2์ค๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋จผ์ ์ฒ์์๋ ๊ทธ ๋ฒ์ค์ ์ถ๋ฐ ๋์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์์๋ ๋์ฐฉ์ง์ ๋์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๊ณ ๋ ๊ทธ ๋ฒ์ค ๋น์ฉ์ด ์ฃผ์ด์ง๋ค. ๋ฒ์ค ๋น์ฉ์ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์์ ์ ์์ด๋ค.
๊ทธ๋ฆฌ๊ณ M+3์งธ ์ค์๋ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๊ณ ์ ํ๋ ๊ตฌ๊ฐ ์ถ๋ฐ์ ์ ๋์๋ฒํธ์ ๋์ฐฉ์ ์ ๋์๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ถ๋ฐ์ ์์ ๋์ฐฉ์ ์ ๊ฐ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ถ๋ฐ ๋์์์ ๋์ฐฉ ๋์๊น์ง ๊ฐ๋๋ฐ ๋๋ ์ต์ ๋น์ฉ์ ์ถ๋ ฅํ๋ค.