반응형
✏️ 문제 링크
https://www.acmicpc.net/problem/1516
1516번: 게임 개발
첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부
www.acmicpc.net
✏️ 문제 설명 (더보기 클릭 👆🏻)
✏️ 문제 풀이
2021.10.03 - [Algorithm 💫/알고리듬(thm) 공부 🌱] - [백준] 1005번: ACM craft / C++
2021.10.04 - [Algorithm 💫/알고리듬(thm) 공부 🌱] - [백준] 2056번: 작업 / C++
위 두 문제를 해결했다면 동일한 방식!
✏️ 문제 코드
#include <bits/stdc++.h>
using namespace std;
#define MAX 501
#define INF 987654321
vector<int> entry(MAX, 0);
vector<int> dp(MAX, 0);
vector<int> vec[MAX];
vector<int> spent(MAX, 0);
int main(){
int N; cin>>N;
for(int i=1; i<=N; i++){
cin>>spent[i];
int b;
while(true){
cin>>b;if(b==-1)break;
entry[i]++;
vec[b].push_back(i);
}
}
queue<int> q;
for(int i=1; i<=N; i++){
if(!entry[i]){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]) q.push(nxt);
}
}
for(int i=1; i<=N; i++) cout<<dp[i]<<"\n";
return 0;
}
⭐ if feedback and question : comment please⭐
반응형
'Algorithm 💫 > Problem Solving' 카테고리의 다른 글
[백준] 3449번: 해밍 거리 (0) | 2021.10.04 |
---|---|
[백준] 11723번: 집합 (0) | 2021.10.04 |
[백준] 2056번: 작업 / C++ (0) | 2021.10.04 |
[백준] 2252번: 문제집 / C++ (0) | 2021.10.04 |
[백준] 2252번: 줄 세우기 / C++ (0) | 2021.10.03 |
댓글