-
백준 2056 작업 | C++[백준 알고리즘]/[C++] 2021. 3. 29. 13:39728x90반응형
이번 포스팅은 백준 2056번 작업입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
위상 정렬 Topological Sort
풀이
최소 시간을 갱신하는 조건
line42
result[next] = max(result[next], result[cur] + time[next]);
정점 next의 최소 건설 시간은 선행 정점이 모두 지어진 시간에 자신의 건물을 짓는 시간을 더한 값이다.
전체 코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657//백준2056 작업#include <iostream>#include <vector>#include <queue>using namespace std;int main() {int N;cin >> N;vector<int> adj[10002];int inDeg[10002] = { 0, };queue<int> q;int time[10002];int result[10002];for (int i = 1; i <= N; i++) {cin >> time[i];int preNum;cin >> preNum;for (int j = 0; j < preNum; j++) {int preBuild;cin >> preBuild;adj[preBuild].push_back(i);inDeg[i]++;}}for (int i = 1; i <= N; i++) {if (inDeg[i] == 0) {q.push(i);}result[i] = time[i];}while (!q.empty()) {int cur = q.front();q.pop();for (int i = 0; i < adj[cur].size(); i++) {int next = adj[cur][i];inDeg[next]--;result[next] = max(result[next], result[cur] + time[next]);if (inDeg[next] == 0) {q.push(next);}}}int ans = -1;for (int i = 1; i <= N; i++) {ans = max(ans, result[i]);}cout << ans;return 0;}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
백준 1766 문제집 | C++ (0) 2021.03.29 백준 1005 ACM Craft | C++ (1) 2021.03.29 백준 1516 게임 개발 | C++ (0) 2021.03.26 백준 2437 저울 | C++ (0) 2021.03.25 백준 2230 수 고르기 | C++ (0) 2021.03.24