< 문제 >
1005번: ACM Craft (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
'코딩 테스트 > 다이나믹 프로그래밍' 카테고리의 다른 글
[백준 2533번] 사회망 서비스(SNS) 문제 풀이 (with Python) (0) | 2023.11.10 |
---|---|
[백준 1082번] 방 번호 문제 풀이 (with Python) (0) | 2023.09.25 |
[백준 1965번] 상자 넣기 문제풀이 (with Python) (0) | 2023.08.24 |
[백준 10844번] 쉬운 계단 수 문제풀이 (with Python) (0) | 2023.08.23 |
[백준 11722번] 가장 긴 감소하는 부분 수열 문제 풀이 with Python (0) | 2023.08.22 |
댓글