๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold5] 1916๋ฒˆ_์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ

Dbswnstjd 2023. 4. 27. 14:23

๋ฌธ์ œ

https://www.acmicpc.net/problem/1916

 

1916๋ฒˆ: ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง€๊ณ  ๋‘˜์งธ ์ค„์—๋Š” ๋ฒ„์Šค์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์…‹์งธ ์ค„๋ถ€ํ„ฐ M+2์ค„๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฒ„์Šค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋จผ์ € ์ฒ˜์Œ์—๋Š” ๊ทธ

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 1916๋ฒˆ ๋ฌธ์ œ - ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ
import sys
import heapq
input = sys.stdin.readline
n, m= int(input()), int(input())
graph = [[] for _ in range(n+1)]
INF = 1e9
distance = [INF] * (n+1)
for _ in range(m):
    a, b, c = map(int, input().split())
    graph[a].append((b,c))
start, end = map(int, input().split())
    
def dijkstra(start):
    q = []
    heapq.heappush(q, (0,start))
    distance[start] = 0
    while q:
        dist, now = heapq.heappop(q)
        if distance[now] < dist:
            continue
        for i in graph[now]:
            cost = dist + i[1]
            if cost < distance[i[0]]:
                distance[i[0]] = cost
                heapq.heappush(q, (cost, i[0]))
dijkstra(start)
print(distance[end])

์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค ์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. 

์ฒ˜์Œ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ดค๋Š”๋ฐ ์ฝ”๋“œ๊ฐ€ ๋˜‘๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ sys ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์˜€๋”๋‹ˆ ํ†ต๊ณผ๋˜์—ˆ๋‹ค. 

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ๋งŽ์ด ํ’€์–ด๋ณด๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.