import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
import heapq
n, m = map(int, input().split())
start = int(input())
INF = int(1e9)
graph = [[] * (n+1) for _ in range(n+1)]
distance = [INF] * (n+1)
for _ in range(m):
u, v, w = map(int, input().split())
# u에서 v로 가는 거리가 w라는 의미
graph[u].append((v, w))
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(start)
for i in range(1, n+1):
if distance[i] == INF:
print("INF")
else:
print(distance[i])
다익스트라 알고리즘을 사용해서 풀면 된다.
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][스택] 4949. 균형잡힌 세상 (파이썬/Python) (0) | 2021.11.11 |
---|---|
[백준][스택] 9012. 스택 (파이썬/Python) (0) | 2021.11.11 |
[백준][BFS] 7576. 토마토 (파이썬/Python) (0) | 2021.11.09 |
[백준][큐 & 덱] 18258. 큐 2 (파이썬/Python) (0) | 2021.11.08 |
[백준][구현] 2504.괄호의 값 (파이썬/Python) (0) | 2021.11.02 |