(전공복습) 데이터과학 4. 시각화
차례
음수 가중치 사이클이 있는지 찾는 문제이다.
따라서, 벨만-포드 알고리즘을 통해서 문제를 풀 수 있다.
벨만-포드 알고리즘으로 최단거리를 찾은 후, 그 이후에도 추가적인 갱신이 이루어진다면 음수 가중치 사이클이 존재하는 것이므로 YES가 된다.
그런데, 이 글에 따르면 이러한 풀이는 잘못된 풀이라고 한다.
좀 더 정확히는 의도치 않게 맞게 되는 풀이인데, 자세한 것은 해당 글을 참조하길 바란다.
from sys import stdin
input = stdin.readline
inf = 5000000
tc = int(input())
for _ in range(tc):
n, m, w = map(int, input().split())
edges = []
dist = [inf] * (n+1)
dist[1] = 0
for _ in range(m):
s, e, t = map(int, input().split())
edges.append((s, e, t))
edges.append((e, s, t))
for _ in range(w):
s, e, t = map(int, input().split())
edges.append((s, e, -t))
# 여기서부터 벨만-포드
for _ in range(n-1):
for s, e, t in edges:
if dist[e] > dist[s] + t:
dist[e] = dist[s] + t
# 벨만-포드를 한번 더 돌려 갱신된다면 YES, 아니면 NO
for s, e, t in edges:
if dist[e] > dist[s] + t:
print('YES')
break
else:
print('NO')
문제 링크 문제 링크
개요 선형적인 자료구조에서는 값에 접근하는 데에 \(O(1)\)이면 충분하지만, 대신 부분합을 구하는 데에는 \(O(N)\)이 필요하다. 그렇다면 이 자료구조를 이진 트리로 구성하면 어떨까? 값에 접근하는 데에 걸리는 시간이 \(O(\lg N)\)으로 늘어나지만 대신 부분합을 구하...
개요 다익스트라 알고리즘과 함께 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 다익스트라 알고리즘보다 느리지만, 음수 가중치 간선이 있어도 작동하며, 음수 가중치 사...
개요 다익스트라 알고리즘은 Single Sourse Shortest Path(SSSP) 문제를 푸는 알고리즘 중 하나이다. 즉, 한 노드에서 다른 모든 노드로 가는 최단 경로를 구하는 알고리즘이다. 단, 다익스트라 알고리즘은 음수 가중치 엣지를 허용하지 않는다. 이 경우에는 벨만-...