본문 바로가기
알고리즘

[백준/파이썬] #11657

by 룰루루 2025. 4. 4.

음수 간선이 존재한다는 걸 알자 벨만 포드 알고리즘을 써야겠다고는 생각했다. 그런데 정확히 해당 알고리즘이 어떻게 되어있는지는 기억이 잘 안 나서, 풀이는 아니지만 다른 블로그 글을 참고했다. 

 

알고보니 설명하는 로직을 그대로 문제에 적용하면 답이 풀리더라... 뭔가 답지를 본 느낌이 들었지만 일단 내가 쓴 풀이를 가져와봤다. 

import sys

input = sys.stdin.readline
INF = 1e9

N, M = map(int, input().split())
dist = [INF] * (N+1)
edges = []
start = 1
for _ in range(M):
    A, B, C = map(int, input().split())
    edges.append((A, B, C))

dist[start] = 0
negative_cycle = False
for i in range(N):
    for j in range(M):
        curNode, nextNode, edgeCost = edges[j]
        if dist[curNode] != INF and dist[curNode] + edgeCost < dist[nextNode]:
            dist[nextNode] = dist[curNode] + edgeCost
            if i == N-1:
                negative_cycle = True
                break

if negative_cycle:
    print(-1)
else:
    for i in range(2, N+1):
        if dist[i] == INF:
            print(-1)
        else:
            print(dist[i])

 

'알고리즘' 카테고리의 다른 글

[백준/파이썬] #1174  (0) 2025.04.07
[백준/파이썬] #6443  (0) 2025.04.05
[백준/파이썬] #13549  (0) 2025.04.01
[백준/파이썬] #22945  (0) 2025.03.31
[백준/파이썬] #15961  (0) 2025.03.29