알고리즘 문제풀이
Piggy Back [10652 백준]
wiojfe
2024. 9. 18. 11:39
https://www.acmicpc.net/problem/10652
3회 다익스트라 알고리즘 시행을 해서 최소비용으로 목적지에 도착하는 경로를 탐색하면 된다.
import heapq
import sys
from collections import defaultdict
# 다익스트라 알고리즘
def dijkstra(start, graph, n, energy):
dist = [float('inf')] * (n + 1)
dist[start] = 0
pq = [(0, start)]
while pq:
current_dist, u = heapq.heappop(pq)
if current_dist > dist[u]:
continue
for v, weight in graph[u]:
if dist[v] > current_dist + weight * energy:
dist[v] = current_dist + weight * energy
heapq.heappush(pq, (dist[v], v))
return dist
# 입력 처리
B, E, P, N, M = map(int, input().split())
graph = defaultdict(list)
for _ in range(M):
u, v = map(int, input().split())
graph[u].append((v, 1)) # 양방향 그래프
graph[v].append((u, 1))
# 다익스트라로 각각의 출발점에서 최단 거리 구하기
dist_from_bessie = dijkstra(1, graph, N, B)
dist_from_elsie = dijkstra(2, graph, N, E)
dist_from_barn = dijkstra(N, graph, N, P)
# 최소 에너지를 구하기 위한 계산
min_energy = float('inf')
for i in range(1, N + 1):
total_energy = dist_from_bessie[i] + dist_from_elsie[i] + dist_from_barn[i]
min_energy = min(min_energy, total_energy)
# 결과 출력
print(min_energy)