Algorithm 💫/Problem Solving
[백준] 2056번: 작업 / C++
돼지고기맛있다
2021. 10. 4. 17:13
반응형
✏️ 문제 링크
https://www.acmicpc.net/problem/2056
2056번: 작업
수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해
www.acmicpc.net
✏️ 문제 설명 (더보기 클릭 👆🏻)
✏️ 문제 풀이
2021.10.03 - [Algorithm 💫/알고리듬(thm) 공부 🌱] - [백준] 1005번: ACM craft / C++
위 문제를 해결했다면 동일한 방식!
✏️ 문제 코드
#include <bits/stdc++.h>
using namespace std;
#define MAX 10001
#define INF 987654321
vector<int> spent(MAX, 0);
vector<int> entry(MAX, 0);
vector<int> vec[MAX];
vector<int> dp(MAX, 0);
int main(){
int N;cin>>N;
//time, priority works, 아 내앞에 있는 번호들이 주어진다.
for(int i=1; i<=N; i++){
cin>>spent[i]>>entry[i];
for(int j=0; j<entry[i]; j++){
int w; cin>>w;
vec[w].push_back(i);
}
}
queue<int> q;
for(int i=1; i<=N; i++){
if(entry[i]==0) {q.push(i); dp[i]=spent[i];}
}
while(!q.empty()){
int t=q.front(); q.pop();
for(int i=0; i<vec[t].size(); i++){
int nxt=vec[t][i];
entry[nxt]--;
dp[nxt]=max(dp[nxt], dp[t]+spent[nxt]);
if(entry[nxt]==0) q.push(nxt);
}
}
int ans=*max_element(dp.begin(), dp.begin()+(N+1));
cout<<ans<<"\n";
return 0;
}
⭐ if feedback and question : comment please⭐
반응형