253382026-02-19 11:27:49KevinRaktárba szállítás (45 pont)cpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base3/45
1Hibás válasz0/01ms316 KiB
2Hibás válasz0/06ms824 KiB
3Hibás válasz0/11ms316 KiB
4Hibás válasz0/11ms316 KiB
5Hibás válasz0/12ms692 KiB
6Hibás válasz0/11ms316 KiB
7Hibás válasz0/12ms316 KiB
8Hibás válasz0/11ms316 KiB
9Elfogadva1/16ms1012 KiB
10Elfogadva1/16ms820 KiB
11Elfogadva1/16ms820 KiB
12Hibás válasz0/12ms316 KiB
13Hibás válasz0/11ms316 KiB
14Hibás válasz0/11ms324 KiB
15Hibás válasz0/11ms508 KiB
16Hibás válasz0/11ms332 KiB
17Hibás válasz0/11ms316 KiB
18Hibás válasz0/11ms500 KiB
19Hibás válasz0/11ms468 KiB
20Hibás válasz0/11ms316 KiB
21Hibás válasz0/26ms820 KiB
22Hibás válasz0/26ms1012 KiB
23Hibás válasz0/24ms820 KiB
24Hibás válasz0/39ms1588 KiB
25Hibás válasz0/310ms1588 KiB
26Hibás válasz0/34ms1004 KiB
27Hibás válasz0/34ms1076 KiB
28Hibás válasz0/38ms1588 KiB
29Hibás válasz0/38ms1588 KiB
30Hibás válasz0/38ms1692 KiB