728x90
반응형
· 문제링크
https://www.acmicpc.net/problem/1005
1005번: ACM Craft
첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부
www.acmicpc.net
· 핵심 : 위상 정렬 + 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 |