본문 바로가기

백준/골드

[백준 1516번] 게임 개발 (C++)

문제링크 : https://www.acmicpc.net/problem/1516

 

1516번: 게임 개발

첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

int N, num;
vector<int>v[501];
int inDegree[501], dp[501], arr[501];
queue<int>q;

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

    cin >> N;
    for(int i=1; i<=N; i++)
    {   
        cin >> arr[i];
        while(1)
        {
            cin >> num;
            if(num==-1) break;
            v[num].push_back(i);
            inDegree[i]++;
        }
    }

    for(int i=1; i<=N; i++)
    {
        if(inDegree[i]==0) 
        {
            q.push(i);
            dp[i]=arr[i]; //초기화
        }
    }

    while(!q.empty())
    {
        int cur = q.front(); q.pop();
        for(int i=0; i<v[cur].size(); i++)
        {
            int next = v[cur][i];
            dp[next] = max(dp[next], dp[cur]+arr[next]); //점화식
            if(--inDegree[next]==0) q.push(next);
        }

    }

    for(int i=1; i<=N; i++) cout << dp[i] << "\n";
    
    return 0;
}

 

위상정렬 알고리즘을 사용하는 [백준 1005번] ACM Craft과 거의 동일한 문제이다.

따라서 아래와 같이 해당 문제에 대한 링크를 첨부하는 것으로 풀이를 대신하였다.

 

ACM Craft 문제 링크 : https://blob-thinking.tistory.com/289

 

[백준 1005번] ACM Craft (C++)

문제링크 : https://www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서

blob-thinking.tistory.com

 

'백준 > 골드' 카테고리의 다른 글

[백준 4811번] 알약 (C++)  (0) 2023.11.26
[백준 2240번] 자두나무 (C++)  (0) 2023.11.25
[백준 12869번] 뮤탈리스크 (C++)  (0) 2023.11.23
[백준 1520번] 내리막 길 (C++)  (0) 2023.11.21
[백준 1958번] LCS 3 (C++)  (0) 2023.11.18