Skip to content

Commit

Permalink
[Gold IV] Title: 작업, Time: 56 ms, Memory: 5984 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
belowyoon committed Apr 19, 2024
1 parent bb1e115 commit b95b19f
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
34 changes: 34 additions & 0 deletions 백준/Gold/2056. 작업/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# [Gold IV] 작업 - 2056

[문제 링크](https://www.acmicpc.net/problem/2056)

### 성능 요약

메모리: 5984 KB, 시간: 56 ms

### 분류

방향 비순환 그래프, 다이나믹 프로그래밍, 그래프 이론, 위상 정렬

### 제출 일자

2024년 4월 20일 00:41:56

### 문제 설명

<p>수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다.</p>

<p>몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 반드시 먼저 완료되어야 할 작업들이 있다. 이 작업들은 번호가 아주 예쁘게 매겨져 있어서, K번 작업에 대해 선행 관계에 있는(즉, K번 작업을 시작하기 전에 반드시 먼저 완료되어야 하는) 작업들의 번호는 모두 1 이상 (K-1) 이하이다. 작업들 중에는, 그것에 대해 선행 관계에 있는 작업이 하나도 없는 작업이 반드시 하나 이상 존재한다. (1번 작업이 항상 그러하다)</p>

<p>모든 작업을 완료하기 위해 필요한 최소 시간을 구하여라. 물론, 서로 선행 관계가 없는 작업들은 동시에 수행 가능하다.</p>

### 입력

<p>첫째 줄에 N이 주어진다.</p>

<p>두 번째 줄부터 N+1번째 줄까지 N개의 줄이 주어진다. 2번째 줄은 1번 작업, 3번째 줄은 2번 작업, ..., N+1번째 줄은 N번 작업을 각각 나타낸다. 각 줄의 처음에는, 해당 작업에 걸리는 시간이 먼저 주어지고, 그 다음에 그 작업에 대해 선행 관계에 있는 작업들의 개수(0 ≤ 개수 ≤ 100)가 주어진다. 그리고 선행 관계에 있는 작업들의 번호가 주어진다.</p>

### 출력

<p>첫째 줄에 모든 작업을 완료하기 위한 최소 시간을 출력한다.</p>

36 changes: 36 additions & 0 deletions 백준/Gold/2056. 작업/작업.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);

int n, k, p;
cin >> n;
vector<int> t(n+1, 0);
vector<vector<int>> pre(n+1, vector<int>());
vector<int> dp(n+1, 0);

for (int i = 1; i <= n; i++) {
cin >> t[i];
cin >> k;
for (int j = 0; j < k; j++) {
cin >> p;
pre[i].push_back(p);
}
}

for (int i = 1; i <= n; i++) {
int maxWait = 0;
for (int j = 0; j < pre[i].size(); j++) {
maxWait = max(dp[pre[i][j]], maxWait);
}
dp[i] = maxWait + t[i];
}
cout << *max_element(dp.begin(), dp.end());

return 0;
}

0 comments on commit b95b19f

Please sign in to comment.