# Practice : dijkstra
import heapq
n = int(input())
m = int(input())
graph = [[] for _ in range(n + 1)]
visited = [False] * (n + 1)
costs = [float("inf")] * (n + 1) # 각 노드까지 가는 데 드는 비용 테이블
for _ in range(m):
i, j, cost = map(int, input().split())
graph[i].append((j, cost))
# print(graph)
def dijkstra(start):
global costs
queue = []
costs[start] = 0
heapq.heappush(queue, (0, start))
while queue:
for _ in range(len(queue)):
accum_cost, present_node = heapq.heappop(queue)
if costs[present_node] < accum_cost:
continue
for next_node, cost in graph[present_node]:
heapq.heappush(queue, (accum_cost + cost, next_node))
if costs[next_node] > accum_cost + cost:
costs[next_node] = accum_cost + cost
# print(costs)
start, end = map(int, input().split())
dijkstra(start)
# print(costs)
print(costs[end])
메모리 초과가 나는 이유는?
heapq.heappush(queue, (accum_cost + cost, next_node)) 위치가 잘못됐음def dijkstra(start, end):
global costs
queue = []
costs[start] = 0
heapq.heappush(queue, (0, start))
while queue:
accum_cost, present_node = heapq.heappop(queue)
if present_node == end:
return accum_cost
if costs[present_node] < accum_cost:
continue
for next_node, cost in graph[present_node]:
heapq.heappush(queue, (accum_cost + cost, next_node))
if costs[next_node] > accum_cost + cost:
costs[next_node] = accum_cost + cost
start, end = map(int, input().split())
dijkstra(start, end)