https://www.acmicpc.net/problem/2056
풀이
문제를 읽어보면 위상정렬 알고리즘임을 알 수 있다.
위상정렬 알고리즘: https://sunghyun98.tistory.com/249
코드
# 2056번 작업
import sys
from collections import deque
n = int(sys.stdin.readline())
graph = [[] for _ in range(n+1)]
cost = [0 for _ in range(n+1)]
numOfEdges = [0 for _ in range(n+1)]
for i in range(1, n+1):
info = list(map(int, sys.stdin.readline().split()))
cost[i] = info[0]
nums = info[1]
numOfEdges[i] = nums
for j in range(2, nums+2):
graph[info[j]].append(i)
queue = deque([])
dp = [0 for _ in range(n+1)]
for i in range(1, n+1):
if numOfEdges[i] == 0:
queue.append(i)
dp[i] = cost[i]
while queue:
c = queue.popleft()
for i in graph[c]:
dp[i] = max(dp[i], dp[c] + cost[i])
numOfEdges[i] -= 1
if numOfEdges[i] == 0:
queue.append(i)
print(max(dp))
출력결과
'백준 > 위상 정렬' 카테고리의 다른 글
[백준][Python] 2623번 음악프로그램 - 코팩 (0) | 2023.09.12 |
---|---|
[백준][Python] 1516번 게임개발 - 코팩 (0) | 2023.09.11 |
[백준][Python] 1005번 ACM Craft - 코팩 (0) | 2023.08.11 |
[백준][Python] 1766번 문제집 - 코팩 (0) | 2023.08.10 |
[백준][Python] 2252번 줄 세우기 - 코팩 (0) | 2023.08.09 |