length = n + 1 table = [[-1, None, False] for _ inrange(length)] table[k][0] = 0
time_map = {} for t in times: source, target, time = t[0], t[1], t[2] if source notin time_map: time_map[source] = [] time_map[source].append((target, time))
whileTrue: # pick the shortest node min_dis = None min_node = None for i inrange(length): t = table[i] if t[0] == -1: continue if t[2]: continue if min_dis isNoneor t[0] < min_dis: min_dis = t[0] min_node = i if min_node isNone: break table[min_node][2] = True
if min_node notin time_map: continue for target, time in time_map[min_node]: if table[target][2]: continue if table[target][0] == -1or table[min_node][0] + time < table[target][0]: table[target][0] = table[min_node][0] + time table[target][1] = min_node
result = None for t in table[1:]: if t[0] == -1: return -1 if result isNoneor result < t[0]: result = t[0] return result