728x90
반응형
· 문제링크
https://www.acmicpc.net/problem/1005
· 핵심 : 위상 정렬 + DP
· 코드(Python)
# https://www.acmicpc.net/problem/1005
t = int(input())
for _ in range(t):
N, K = map(int, input().split())
adj = [[] for _ in range(N + 1)]
ind = [0 for _ in range(N + 1)]
dp = [0 for _ in range(N + 1)]
times = ['인덱스용'] + list(map(int, input().split()))
for _ in range(K):
X, Y = map(int, input().split())
adj[X].append(Y)
ind[Y] += 1
W = int(input())
# 후보군 넣기
candidates = []
for num in range(1, N + 1):
if ind[num] == 0:
candidates.append(num)
dp[num] = times[num]
# candidates 비울 때까지 확인
result = []
while candidates:
cur = candidates.pop()
result.append(cur)
for nxt in adj[cur]:
ind[nxt] -= 1
dp[nxt] = max(dp[nxt], times[nxt] + dp[cur])
if ind[nxt] == 0:
candidates.append(nxt)
print(dp[W])
728x90
반응형
'PS > 백준' 카테고리의 다른 글
[백준/BOJ] 14621번 - 나만 안되는 연애 (Python) (1) | 2023.10.21 |
---|---|
[백준/BOJ] 27172번 - 수 나누기 게임 (Python) (1) | 2023.10.17 |
[백준/BOJ] 2623번 - 음악프로그램 (Python) (0) | 2023.09.29 |
[백준/BOJ] 1347번 - 미로 만들기 (Python, Java) (0) | 2023.09.25 |
[백준/BOJ] 2252번 - 줄 세우기 (Python, Java) (0) | 2023.09.25 |