새소식

반응형
Algotithms

[백준] 1753 최단경로

  • -
728x90
반응형

문제

  • 방향그래프가 주어지면 시작점에서 다른 모든 정점으로의 최단 경로 구하기
  • 서로 다른 두 정점 사이에 여러 개의 간선이 존재할 수도 있음에 유의한다.
  • 1 <= 정점 개수 V <= 20,000
    1 <= 간선 개수 E <= 300,000

 

풀이

  • 다익스트라로 풀 수 있는 전형적인 최단경로 문제
  • A -> B 로 가는 간선이 여러 개일 수 있으므로 정렬 후 시작하도록 한다. **
  • 시간 초과에 유의하기 위해 입력시 sys.stdin.readline 사용한다.

 

import heapq
import sys
input = sys.stdin.readline

V, E = map(int, input().split())
K = int(input())    # 시작점
# 그래프 입력
graph = [[] for _ in range(V+1)]
for _ in range(E) :
    u, v, w = map(int, input().split())
    graph[u].append((v, w))
# 그래프 정렬
for i in range(V+1) :
    graph[i].sort()

# 다익스트라
INF = int(1e9)
distance = [INF] * (V+1)
distance[K] = 0
q = [(0, K)]

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]))

# 출력
for dist in distance[1:] :
    print(dist if dist != INF else "INF")

 

References

  • 백준 최단경로
반응형

'Algotithms' 카테고리의 다른 글

[백준] 1915 가장 큰 정사각형  (0) 2023.10.03
[백준] 13305 주유소  (0) 2023.10.02
[백준] 16918 봄버맨  (0) 2023.09.26
[백준] 21918 전구  (0) 2023.09.26
[백준] 18427 함께 블록 쌓기  (0) 2023.09.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.