본문 바로가기
코딩 테스트/다이나믹 프로그래밍

[백준 1005번] ACM Craft 문제 풀이

by 서영선 2023. 9. 11.

< 문제 >

1005번: ACM Craft (acmicpc.net)

 

1005번: ACM Craft

첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부

www.acmicpc.net

 

 

< 코드 >

from collections import deque
import sys
input = sys.stdin.readline

n = int(input())
for _ in range(n):
    N, K = map(int, input().split())
    arr = [[] for _ in range(N + 1)]  # 연결된 건물 정보 배열
    cnt_arr = [0] * (N+1)

    time = [0] + list(map(int, input().split()))  # 소요 시간 배열
    for _ in range(K):
        a, b = map(int, input().split())
        arr[a].append(b)
        cnt_arr[b] += 1

    target = int(input())
    dp = [-1] + [0]*N
    q = deque()

    for i in range(1, N+1):
        if cnt_arr[i] == 0:
            q.append(i)
            dp[i] = time[i]


    while q:
        now = q.popleft()
        for node in arr[now]:
            cnt_arr[node] -= 1
            dp[node] = max(dp[node], dp[now] + time[node])
            if cnt_arr[node] ==0:
                q.append(node)

        if cnt_arr[target]==0:
            print(dp[target])
            break

 

댓글