본문 바로가기
Algorithm 💫/Problem Solving

[백준] 1516번: 게임 개발 / C++

by 돼지고기맛있다 2021. 10. 4.
반응형

✏️ 문제 링크

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

댓글