11779 최소비용 구하기 2

정민용·2023년 4월 5일

백준

목록 보기
101/286

문제

n(1≤n≤1,000)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1≤m≤100,000)개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. 그러면 A번째 도시에서 B번째 도시 까지 가는데 드는 최소비용과 경로를 출력하여라. 항상 시작점에서 도착점으로의 경로가 존재한다.

# 11779
import sys
input = lambda : sys.stdin.readline().strip()
INF = int(1e9)

import heapq
n = int(input())
m = int(input())
graph = [[] for _ in range(n+1)]
root = [[i] for i in range(n+1)]
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]))
                root[i[0]] = root[now] + [i[0]]
                
dijkstra(start)

print(distance[end])

print(len(root[end]))

print(*root[end])

백준 11779 최소비용 구하기 2

0개의 댓글