STUDY/Algorithm

[백준] 11657 타임머신 python

sinawi95 2022. 3. 11. 08:29
728x90

https://www.acmicpc.net/problem/11657

 

11657번: 타임머신

첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. 

www.acmicpc.net

벨만 포드 알고리즘을 사용하는 문제이다. 알고리즘에 대한 자세한 내용은 아래 링크로 달아놓겠다.

# import sys; input = sys.stdin.readline
INF = 20_000_000_000

def bf(start):
    global dist, N, M, edges
    dist[start] = 0

    for i in range(N):
        for j in range(M):
            cur, next, cost = edges[j]

            if dist[cur] != INF and dist[next] > dist[cur] + cost:
                dist[next] = dist[cur] + cost
                if i == N - 1:
                    return True
    return False


def main():
    global dist, N, M, edges

    N, M = map(int, input().split())
    edges = []
    for _ in range(M):
        a, b, c = map(int, input().split())
        edges.append((a, b, c))

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


if __name__ == "__main__":
    main()

https://www.youtube.com/watch?v=Ppimbaxm8d8 

 

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 1439 뒤집기 C,C++  (0) 2022.03.12
[백준] 1865 웜홀 python  (0) 2022.03.11
[백준] 16235 나무 재테크 python(pypy)  (0) 2022.03.10
[백준] 10597 순열장난 python, c/c++  (0) 2022.03.09
[백준] 1343 폴리오미노 C  (0) 2022.03.08