🚩 코딩테스트/알고리즘
[백준] 1753번: 최단경로
딩딩크롱
2023. 5. 11. 00:57
728x90
문제
https://www.acmicpc.net/problem/1753
1753번: 최단경로
첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가
www.acmicpc.net
풀이
다익스트라 알고리즘을 사용해 풀었습니다.
※ heap에서 꺼낸 비용보다 cost의 비용이 더 작다면 넘어갑니다. (time limit 방지)
코드
파이썬
import sys
from heapq import heappush, heappop
input = sys.stdin.readline
INF = sys.maxsize
V, E = map(int, input().split())
K = int(input())
graph = [[] for _ in range(V + 1)]
cost = [INF] * (V + 1)
for _ in range(E):
u, v, w = map(int, input().split())
graph[u].append((w, v))
heap = []
cost[K] = 0
heappush(heap, (0, K))
while heap:
c, x = heappop(heap)
if cost[x] < c:
continue
for nc, nx in graph[x]:
if cost[nx] > c + nc:
cost[nx] = c + nc
heappush(heap, (cost[nx], nx))
for c in cost[1:]:
print(c if c != INF else "INF")
728x90