알고리즘
[BOJ] 1865 - 웜홀 (Python)
흙금
2023. 4. 14. 23:57
아이디어
벨만-포드로 음의 사이클이 존재하는지 확인한다.
풀이
도로는 방향이 없고 웜홀은 방향이 있음에 주의해야 한다.
import sys
input = sys.stdin.readline
INF = int(1e11)
def solution():
TC = int(input())
for _ in range(TC):
N, M, W = map(int, input().split())
graph = [dict() for _ in range(N+1)]
for _ in range(M):
S, E, T = map(int, input().split())
graph[S][E] = min(graph[S].get(E, INF), T)
graph[E][S] = min(graph[E].get(S, INF), T)
for _ in range(W):
S, E, T = map(int, input().split())
graph[S][E] = min(graph[S].get(E, INF), -T)
D = [INF]*(N+1)
for _ in range(N-1):
for i in range(1, N+1):
for j, t in graph[i].items():
if D[i]+t < D[j]:
D[j] = D[i]+t
_D = D[:]
for i in range(1, N+1):
for j, t in graph[i].items():
if _D[i]+t < _D[j]:
_D[j] = _D[i]+t
print('NO' if D == _D else 'YES')
solution()