import sys
import heapq
from sys import stdin
from collections import deque
sys.setrecursionlimit(10 ** 8)
sys.stdin.readline
import sys
from sys import stdin
from collections import deque
sys.setrecursionlimit(10 ** 8)
sys.stdin.readline
INF = int(1e9)
N,M = map(int,sys.stdin.readline().split())
start = int(input())
graph = [[] for _ in range(N+1)]
distance = [INF] * (N+1)
for _ in range(M):
a,b,c = map(int,sys.stdin.readline().split())
graph[a].append((b,c))
def dijkstra(start):
distance[start] = 0
q = []
heapq.heappush(q,(0,start))
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("INFINITY")
else:
print(distance[i])
연습용으로 기록하고 갑니다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[이코테] CH09 최단경로 플로이드 워셜 알고리즘 기본 코드 (0) | 2024.01.16 |
---|---|
[이코테] CH09 최단경로 개선된 다익스트라 알고리즘 기본 코드 (0) | 2024.01.16 |
[백준] 이분탐색 1920번 파이썬 풀이 (0) | 2023.06.29 |
[이코테] 다이나믹 프로그래밍 실전문제 4번 (0) | 2023.06.29 |
[이코테] 다이나믹 프로그래밍 실전문제 3번 (0) | 2023.06.29 |