Hanbit the Developer

[Python] 백준 1916번: 최소비용 구하기 본문

Algorithm/백준

[Python] 백준 1916번: 최소비용 구하기

hanbikan 2021. 7. 16. 18:49

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

 

1916번: 최소비용 구하기

첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그

www.acmicpc.net

 

import sys
import heapq
input = sys.stdin.readline


def getMinTime(start, end):
    todo = [(start, 0)]
    dist = [float('inf')]*(N+1)
    dist[start] = 0

    while todo:
        curNode, curDist = heapq.heappop(todo)

        if curDist > dist[curNode]:
            continue

        for n, d in graph[curNode]:
            nextDist = curDist + d
            if dist[n] > nextDist:
                dist[n] = nextDist
                heapq.heappush(todo, (n, nextDist))

    return dist[end]


if __name__ == '__main__':
    N = int(input())
    M = int(input())

    graph = {i: [] for i in range(1, N+1)}
    for _ in range(M):
        a, b, c = map(int, input().split())
        graph[a].append((b, c))

    start, end = map(int, input().split())

    minTime = getMinTime(start, end)
    print(minTime)

 

어느 한 지점에서 탐색을 시작하면 되기 때문에, 다익스트라를 이용하면 된다.

매우 standard하다.