본문 바로가기
Problem Solving/BOJ

[Dijkstra] 1916 최소비용 구하기

by Bokoo14 2023. 1. 12.

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

 

1916번: 최소비용 구하기

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

www.acmicpc.net

# 2023.01.12
import sys
input=sys.stdin.readline
import heapq

n=int(input())
m=int(input())
graph=[[] for _ in range(n+1)]
for i in range(m):
    a, b, c = map(int, input().split()) 
    graph[a].append((b, c))
start, end = map(int, input().split())

def dijkstra(start):
    distance=[10**9]*(n+1) # 비용 저장
    heap=[] 
    heapq.heappush(heap, (start, 0)) #최소힙
    distance[start]=0 # 시작점의 비용은 0
    while heap:
        current, weight = heapq.heappop(heap)
        if distance[current]<weight: # 최단거리를 갱신한 노드는 다시 확인하지 않음
            continue
        for c, w in graph[current]: # 다음으로 이동할 노드를 갱신시켜줌
            if distance[c] > weight+w: # c까지 가는 경로가 더 최소 비용이라면
                distance[c]=weight+w
                heapq.heappush(heap, (c, weight+w))

    return distance[end]

print(dijkstra(start))

'Problem Solving > BOJ' 카테고리의 다른 글

[Dict] 2143 두 배열의 합  (0) 2023.01.15
[MST] 1197 최소 스패닝 트리  (0) 2023.01.15
[BFS] 7569 토마토  (0) 2023.01.09
[Deque] 5430 AC  (0) 2023.01.08
[Brute Force] 1107 리모컨  (0) 2023.01.08