https://www.acmicpc.net/problem/1238
Input)
4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3
Output)
10
import heapq
n, m, x = [int(x) for x in input().split()]
road = [[] for _ in range(n + 1)]
road_time = [[0] * (n + 1) for _ in range(n + 1)]
for i in range(m):
a, b, c = [int(x) for x in input().split()]
road[a].append(b)
road_time[a][b] = c
def dijk(s):
global road, road_time, x
time = [100*n] * (n + 1)
pq = []
heapq.heappush(pq, (0, s))
time[s] = 0
while(pq):
cur_t, cur_n = heapq.heappop(pq)
if cur_t > time[cur_n]:
continue
for a in road[cur_n]:
next_t = cur_t + road_time[cur_n][a]
if next_t < time[a]:
time[a] = next_t
heapq.heappush(pq, (next_t, a))
return time
time = dijk(x)
for i in range(1,n+1):
if i != x:
time[i] += dijk(i)[x]
print(max(time[1:]))