[BOJ] Q1865 웜홀

Question

Language: Python

Difficulty: Gold 3

일반 도로를 이용할 때는 시간이 앞으로 가고, 웜홀을 이용하게 되면 시간이 뒤로 간다. 이럴때, 출발지에서 시작하여 다시 출발지로 돌아왔을 때 시간이 뒤로 가 있을 경우가 존재하는 지를 묻는 문제이다.

해당 문제는 음수 사이클이 있는지 없는지 여부를 판단하기만 하면 되는 간단한 문제이다.

Solution

from math import inf

def solution(edges,N):
    distance=[10001] * (N+1)
    distance[1]=0
    
    for i in range(N):
        for v1,v2,weight in edges:
            cost=distance[v1]+weight
            if distance[v2]>cost:
                distance[v2]=cost
                if i==N-1:
                    return True
    return False

if __name__ == "__main__":
    testcases=int(input())
    for _ in range(testcases):
        N,e,wormhalls=map(int,input().split())
        edges=[]
    
        for _ in range(e):
            start,end,weight=map(int,input().split())
            edges.append([start,end,weight])
            edges.append([end,start,weight])
            
        for _ in range(wormhalls):
            start,end,weight=map(int,input().split())
            edges.append([start,end,-weight])
            
        if solution(edges,N):
            print("YES")
        else: 
            print("NO")

댓글남기기