import heapq
# import sys
# input = sys.stdin.readline
INF = 999999999
V,E=map(int,input().split())
k=int(input())
dis=[INF]*(V+1)
h=[]
g=[[] for _ in range(V+1)]
def di(st):
dis[st]=0
heapq.heappush(h,(0,st))
while h:
ga,t = heapq.heappop(h)
if dis[t]<ga:
continue
for gne,net in g[t]:
gnesum=gne+ga
if gnesum<dis[net]:
dis[net]=gnesum
heapq.heappush(h,(gnesum,net))
for _ in range(E):
u,v,w=map(int,input().split())
g[u].append((w,v))
di(k)
for j in range(1,V+1):
print("INF" if dis[j]==INF else dis[j])
#dis= 거리
#INF= 무한대
#net= next target
#g= grapg
#di= 다익스트라
#h= 힙 이름
#u= 간선의 출발
#v= 간선의 도착
#v= 정점
#e= 간선
#w= e의 가중치
#ga= 가중치
#gne= 가중치 next
#gnesum= 가중치 next 합
#힙에 반드시 node부터 넣을것!!!!!!!!!!!!
'백준 풀이' 카테고리의 다른 글
백준 2108번 파이썬 (Counter 함수) (0) | 2022.09.01 |
---|---|
백준 14889번 파이썬 (백트레킹) (0) | 2022.09.01 |
백준 1011번 파이썬 (0) | 2022.08.31 |
백준 1011번 파이썬 (0) | 2022.08.31 |
백준 1654번 파이썬 (이분탐색) (0) | 2022.08.31 |