티스토리 뷰

728x90

문제 링크

www.acmicpc.net/problem/1516

 

1516번: 게임 개발

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

www.acmicpc.net

 

풀이

백준 1005 - ACM Craft랑 같은 문제입니다.

(어떤 건물을 지을 수 있는 시간 최솟값 + 그 건물을 짓는데 걸리는 시간)이 다음 건물의 d값보다 크면 업데이트해줍니다.

 

정답 코드

#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
using vvi = vector<vi>;

int n, cost[555], indeg[555], d[555];
vvi p;

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

    cin >> n;
    p.resize(n + 1);
    queue<int> q;
    for (int i = 1; i < n + 1; i++) {
        cin >> cost[i];
        int x;
        while (cin >> x, x != -1) {
            p[x].push_back(i);
            indeg[i]++;
        }
        if (indeg[i] == 0) q.push(i);
    }
    while (!q.empty()) {
        int now = q.front();
        q.pop();
        for (int next: p[now]) {
            d[next] = max(d[next], d[now] + cost[now]);
            if (--indeg[next] == 0) {
                q.push(next);
            }
        }
    }
    for (int i = 1; i < n + 1; i++) {
        cout << d[i] + cost[i] << '\n';
    }
}
728x90

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[BOJ] 백준 1562 계단 수  (0) 2021.03.07
[BOJ] 백준 10844 쉬운 계단 수  (0) 2021.03.07
[BOJ] 백준 1509 팰린드롬 분할  (0) 2021.03.07
[BOJ] 백준 10942 팰린드롬?  (0) 2021.03.07
[BOJ] 백준 1202 보석 도둑  (0) 2021.03.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함