코딩 테스트/백준

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

nan-noo 2023. 4. 15. 02:19
728x90

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

 

1916번: 최소비용 구하기

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

www.acmicpc.net

2023.04.11 - [코딩 테스트/개념] - Dijkstra algorithm

# 1 <= N <= 1000
# 1 <= M <= 100000
# positive weight, start node

import sys
from queue import PriorityQueue

readline = sys.stdin.readline

N = int(readline())
M = int(readline())

graph = [[] for _ in range(N + 1)]
for _ in range(M):
    v1, v2, w = map(int, readline().split())
    graph[v1].append((v2, w))
    
start, end = map(int, readline().split())

infinity = sys.maxsize
distances = [infinity for _ in range(N + 1)]
distances[start] = 0

visited = [False for _ in range(N + 1)]

queue = PriorityQueue()
queue.put((0, start))

while queue.qsize() > 0:
    d, v = queue.get()
    
    if visited[v]:
        continue
    visited[v] = True
    
    for (adj_v, w) in graph[v]:
        distances[adj_v] = min(distances[adj_v], d + w)
        queue.put((distances[adj_v], adj_v))
        
print(distances[end])

시작 노드부터 특정 노드까지의 최소 거리를 구하는 문제고, 양수의 가중치이므로 다익스트라 알고리즘을 활용하면 된다.

728x90

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준 15649번] N과 M (1)  (0) 2023.04.27
[백준 9663번] N-Queen  (2) 2023.04.15
[백준 2252번] 줄 세우기  (0) 2023.04.15
[백준 1976번] 여행 가자  (0) 2023.04.15
[백준 1717번] 집합의 표현  (0) 2023.04.14