반응형
문제
https://www.acmicpc.net/problem/11657
소스코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
grape = {}
for i in range(m):
a, b, c = map(int, input().split())
if a not in grape:
grape[a] = []
grape[a].append((b, c))
def bellman_ford(start):
distance_list = [1e9] * (n + 1)
distance_list[start] = 0
for i in range(n - 1):
for u in grape:
for v, w in grape[u]:
if distance_list[u] != 1e9 and distance_list[u] + w < distance_list[v]:
distance_list[v] = distance_list[u] + w
for u in grape:
for v, w in grape[u]:
if distance_list[u] != 1e9 and distance_list[u] + w < distance_list[v]:
return None
return distance_list
data = bellman_ford(1)
if data == None:
print(-1)
else:
for i in range(n-1):
if data[i + 2] >= 1e9:
print(-1)
else:
print(data[i + 2])
벨만포드 알고리즘 문제입니다.
벨만포드 알고리즘은 간선의 가중치가 음수일때도 성립이 되고, 음수 사이클을 찾을 수 있습니다.
벨만포드 알고리즘의 시간 복잡도는 O(VE)입니다.
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준/Python] 1922번 네트워크 연결 - (크루스칼) (0) | 2024.11.23 |
---|---|
[백준/Python] 1516번 게임 개발 - (위상정렬) (1) | 2024.11.22 |
[백준/Python] 1753번 최단경로 (1) | 2024.11.20 |
[백준/Python] 1275번 커피숍 2 (0) | 2024.11.19 |
[백준/Python] 2357번 최솟값과 최댓값 (0) | 2024.11.17 |
댓글