# 택배 배송 import sys import heapq as h input = sys.stdin.readline def solution(): n, m = map(int, input().rstrip().split()) g = {i+1: [] for i in range(n)} dk = [float('inf') for _ in range(n+1)] for _ in range(m): v, w, k = map(int, input().rstrip().split()) g[v].append((k, w)) g[w].append((k, v)) heap = [] h.heappush(heap, (0, 1)) dk[1] = 0 while heap: now_dist, now_v = h.heappop(heap) if now_dist > dk[now_v]: continue for nxt_k, nxt_v in g[now_v]: new_dist = dk[now_v]+nxt_k if new_dist < dk[nxt_v]: dk[nxt_v] = min(dk[nxt_v], dk[now_v]+nxt_k) h.heappush(heap, (new_dist, nxt_v)) print(dk[n]) return solution() """ 걸린 시간: 47분 시간 복잡도: 간선만큼 진행하는데 이때 heap 정렬이 매번 일어나기 때문에 O(mlogn)이다. 해설: 시작지점에서 끝지점까지의 가중치에 따른 최단거리를 구하는 것이기 때문에 다익스트라를 활용하면 된다. 현재 노드에서 다음 노드까지의 최단거리가 아니라 전체 다익스트라 결과에서 가장 최단거리인 노드로 다시 시작을 하는 것이었다. 이렇게 진행하면 visited를 쓰지 않아도, heap에 중복된 노드가 들어갈 수 있지만 거리가 먼 것은 배제하기 때문에 지장이 없다. """