https://www.acmicpc.net/problem/1916
시간 2초, 메모리 128MB
input :
output :
조건 :
출발점, 도착점으로 구분이 가기 떄문에 단방향 그래프이다.
모든 이동에 대한 최단거리를 구하기 때문에 이전에 방문했던 노드를 방문하는 경우를 걸러내야 한다.
이를 통해 시간을 많이 단축시킬 수 있다.
최단 거리를 기록하기 위해 현재까지의 이동을 기록해야 한다.
그리고 시작 점에서 부터 다음 노드를 찾아 움직이기 때문에 빠지는 노드 놓치는 엣지들이 없다.
import sys
from heapq import heappop, heappush
n = int(sys.stdin.readline())
m = int(sys.stdin.readline())
graph = [[] for i in range(n + 1)]
for i in range(m):
a, b, c = (map(int, sys.stdin.readline().split()))
graph[a].append((b, c))
dist = [float('inf')] * (n + 1)
start, end = map(int, sys.stdin.readline().split())
dist[start] = 0
q = [(0, start)]
while q:
now_cost, now_node = heappop(q)
if dist[now_node] < now_cost:
continue
for next_node, next_cost in graph[now_node]:
cost = now_cost + next_cost
if dist[next_node] > cost:
dist[next_node] = cost
heappush(q, (cost, next_node))
print(dist[end])