https://www.acmicpc.net/problem/1753
import heapq
INF = int(1e9)
v, e = [int(x) for x in input().split()]
k = int(input())
graph = [[] for _ in range(v+1)]
for _ in range(e):
a, b, c = [int(x) for x in input().split()]
graph[a].append((b,c))
asw = [INF] * (v+1)
pq = []
heapq.heappush(pq,(0,k))
while pq:
cur_c, cur_v = heapq.heappop(pq)
for nxt_v, next_c in graph[cur_v]:
new_c = cur_c + next_c
if asw[nxt_v] > new_c:
asw[nxt_v] = new_c
heapq.heappush(pq,(new_c,nxt_v))
asw[k] = 0
for i in range(1,v+1):
if asw[i] == INF:
print("INF")
else:
print(asw[i])
graph = [[]for _ in range(n+1)]
for a, b in edge:
graph[a].append(b)
graph[b].append(a)
dis = [INF]*(n+1)
dis[1] = 0
pq = []
heapq.heappush(pq, (0,1))
while pq:
cur_d, cur = heapq.heappop(pq)
for a in graph[cur]:
new_d = cur_d + 1
if new_d < dis[a]:
dis[a] = new_d
heapq.heappush(pq, (new_d,a))