문제
5972번: 택배 배송
농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는
www.acmicpc.net
입력
- 첫째 줄에 N과 M이 공백을 사이에 두고 주어집니다.
- 둘째 줄부터 M+1번째 줄까지 세 개의 정수 A_i, B_i, C_i가 주어집니다.
출력
- 첫째 줄에 농부 현서가 가져가야 될 최소 여물을 출력합니다.
입력 예제
6 8
4 5 3
2 4 0
4 1 4
2 1 1
5 6 1
3 6 2
3 2 6
3 4 4
출력 예제
5
문제 풀이
- 전형적인 다익스트라 알고리즘 문제
- 최소 여물이 있는 경로로 갱신해가며 이동한 후, 각 값을 갱신 해 놓은 distance 리스트에서 n번째 값을 출력
코드
import heapq
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
INF = int(1e9)
graph = [[] for _ in range(n + 1)]
distance = [INF] * (n + 1)
for _ in range(m):
# 양방향
a,b,c = map(int,input().split())
graph[a].append((b, c))
graph[b].append((a, c))
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(1)
print(distance[n])
'Algorithm > Dijkstra' 카테고리의 다른 글
| [Python] 백준 14284번 간선 이어가기 2 (0) | 2023.03.25 |
|---|---|
| [Python] 백준 11779번 최소비용 구하기2 (0) | 2023.03.23 |
| [Python] 백준 10282번 해킹 (0) | 2023.03.20 |
| [Python] 백준 18223번 민준이와 마산 그리고 건우 (2) | 2023.03.20 |
| [Python] 백준 2665번 미로만들기 (0) | 2023.03.17 |