💡문제접근
- 가중치 C가 양수가 아닌 경우도 존재하므로 벨만-포드 알고리즘을 이용해서 최단 경로를 구할 수 있다.
💡코드(메모리 : 32276KB, 시간 : 744ms)
import sys
input = sys.stdin.readline
INF = int(1e9)
def bf(start):
dist[start] = 0
for i in range(N):
for j in range(M):
cur = edges[j][0]
next_node = edges[j][1]
cost = edges[j][2]
if dist[cur] != INF and dist[next_node] > dist[cur] + cost:
dist[next_node] = dist[cur] + cost
if i == N-1:
return True
return False
N, M = map(int, input().strip().split())
dist = [INF] * (N+1)
edges = []
for _ in range(M):
A, B, C = map(int, input().strip().split())
edges.append([A, B, C])
negative_cycle = bf(1)
if negative_cycle:
print(-1)
else:
for i in range(2, N+1):
if dist[i] == INF:
print(-1)
else:
print(dist[i])
💡소요시간 : 24m