No Rules Rules

게임 개발 (feat. 백준, 1516번) 본문

생활/코테

게임 개발 (feat. 백준, 1516번)

개발하는 완두콩 2023. 3. 28. 12:41
728x90
반응형

게임 개발
https://www.acmicpc.net/problem/1516

 

1516번: 게임 개발

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

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> arr[501];
int check[501]{0};
int time[501]{0}, ans[501]{0};
int main() {
	ios::sync_with_stdio(false), cin.tie(NULL);
    register int N;
    cin >> N;
    for(register int n = 1, b; n <= N; ++n){
        cin >> time[n], ans[n] = time[n];
        while(1){
            cin >> b;
            if(b == -1)
                break;
            arr[b].push_back(n);
            ++check[n];   
        }
    }
    priority_queue<int, vector<int>, greater<int>> q;
    for(register int n = 1; n <= N; ++n)
        if(!check[n])
            q.push(n);
    while(!q.empty()){
        auto pos = q.top(); q.pop();
        for(auto& v : arr[pos]){
            if(ans[pos] + time[v] > ans[v])
                ans[v] = ans[pos] + time[v];
            if(--check[v] == 0)
                q.push(v);
        }
    }
    for(register int n = 1; n <= N; ++n)
        cout << ans[n] << '\n';
	return 0;
}
// *&)*@*

 

반응형

위상정렬을 특성을 활용하여 풀이할 수 있습니다.

문제의 내용이 다르더라도 위상정렬은 우선순위 큐를 활용하는 풀이의 특징이 동일하므로 연습이 필요합니다.

 

728x90
반응형
Comments