253382026-02-19 11:27:49KevinRaktárba szállítás (45 pont)cpp17Wrong answer 3/4510ms1692 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>

using namespace std;

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

    int N, K, C;
    cin >> N >> K >> C;

    vector<int> parent(N + 1);
    vector<int> alkatresz(N + 1);
    vector<vector<int>> children(N + 1);

    for (int i = 1; i <= N; i++) {
        int p, a;
        cin >> p >> a;
        parent[i] = p;
        alkatresz[i] = a;
        if (p != 0) {
            children[p].push_back(i);
        }
    }

    vector<int> dp(N + 1, 0);
    vector<int> order;
    stack<int> st;

    // Iteratív post-order bejárás
    st.push(1);
    vector<bool> visited(N + 1, false);
    vector<bool> processed(N + 1, false);

    while (!st.empty()) {
        int v = st.top();
        if (!visited[v]) {
            visited[v] = true;
            for (int u : children[v]) {
                st.push(u);
            }
        } else {
            st.pop();
            if (!processed[v]) {
                processed[v] = true;

                // Gyerekek dp értékeinek összegyűjtése
                vector<int> childVals;
                for (int u : children[v]) {
                    childVals.push_back(dp[u]);
                }
                sort(childVals.rbegin(), childVals.rend());

                int total = alkatresz[v];
                int capacity = C - alkatresz[v];

                for (int val : childVals) {
                    if (capacity <= 0) break;
                    int take = min(val, capacity);
                    total += take;
                    capacity -= take;
                }
                dp[v] = total;
            }
        }
    }

    // A gyökérből induló kamion is számít
    vector<int> values;
    for (int i = 1; i <= N; i++) {
        values.push_back(dp[i]);
    }

    sort(values.rbegin(), values.rend());

    long long ans = 0;
    for (int i = 0; i < K && i < N; i++) {
        ans += values[i];
    }

    cout << ans << "\n";

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base3/45
1Wrong answer0/01ms316 KiB
2Wrong answer0/06ms824 KiB
3Wrong answer0/11ms316 KiB
4Wrong answer0/11ms316 KiB
5Wrong answer0/12ms692 KiB
6Wrong answer0/11ms316 KiB
7Wrong answer0/12ms316 KiB
8Wrong answer0/11ms316 KiB
9Accepted1/16ms1012 KiB
10Accepted1/16ms820 KiB
11Accepted1/16ms820 KiB
12Wrong answer0/12ms316 KiB
13Wrong answer0/11ms316 KiB
14Wrong answer0/11ms324 KiB
15Wrong answer0/11ms508 KiB
16Wrong answer0/11ms332 KiB
17Wrong answer0/11ms316 KiB
18Wrong answer0/11ms500 KiB
19Wrong answer0/11ms468 KiB
20Wrong answer0/11ms316 KiB
21Wrong answer0/26ms820 KiB
22Wrong answer0/26ms1012 KiB
23Wrong answer0/24ms820 KiB
24Wrong answer0/39ms1588 KiB
25Wrong answer0/310ms1588 KiB
26Wrong answer0/34ms1004 KiB
27Wrong answer0/34ms1076 KiB
28Wrong answer0/38ms1588 KiB
29Wrong answer0/38ms1588 KiB
30Wrong answer0/38ms1692 KiB