https://www.acmicpc.net/problem/2056
2056번: 작업
수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해
www.acmicpc.net
풀이
문제를 읽어보면 위상정렬 알고리즘임을 알 수 있다.
위상정렬 알고리즘: https://sunghyun98.tistory.com/249
[알고리즘] 위상 정렬
위상 정렬은 방향 그래프의 모든 노드를 방향성을 거스르지 않게 순서대로 나열하는 것입니다. 즉, 어떤 작업을 먼저 해야 다른 작업을 할 수 있는 상황과 같은 "의존성"을 갖는 문제를 표현하고
sunghyun98.tistory.com
코드
# 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 |