253322026-02-19 11:13:17KevinRaktárba szállítás (45 pont)cpp17Hibás válasz 3/4514ms3248 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

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

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

    vector<int> parent(N + 1);
    vector<ll> A(N + 1);

    for (int i = 1; i <= N; i++) {
        cin >> parent[i] >> A[i];
    }

    // Fordított fa (gyereklista)
    vector<vector<int>> children(N + 1);
    for (int i = 1; i <= N; i++) {
        if (i != 1) {
            children[parent[i]].push_back(i);
        }
    }

    // Részfaösszegek kiszámítása (postorder DFS)
    vector<ll> subtree(N + 1, 0);

    function<void(int)> dfs = [&](int u) {
        subtree[u] = A[u];
        for (int v : children[u]) {
            dfs(v);
            subtree[u] += subtree[v];
        }
    };

    dfs(1);

    // Max-heap (subtree_sum, node)
    priority_queue<pair<ll,int>> pq;
    for (int i = 1; i <= N; i++) {
        pq.push({subtree[i], i});
    }

    ll result = 0;

    // Aktuális értékek (levonások miatt változik)
    vector<ll> current = subtree;

    for (int used = 0; used < K && !pq.empty(); ) {
        auto [value, u] = pq.top();
        pq.pop();

        // Ha már elavult érték
        if (value != current[u]) continue;

        if (current[u] == 0) break;

        // Kiválasztjuk ezt a részfát
        ll taken = min(current[u], C);
        result += taken;
        used++;

        ll full = current[u];

        // Levonjuk az egész részfát az ősökből
        int x = u;
        while (x != 0) {
            current[x] -= full;
            x = parent[x];
        }
    }

    cout << result << "\n";

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base3/45
1Hibás válasz0/01ms316 KiB
2Hibás válasz0/07ms1332 KiB
3Hibás válasz0/11ms316 KiB
4Hibás válasz0/11ms316 KiB
5Hibás válasz0/11ms316 KiB
6Hibás válasz0/11ms316 KiB
7Hibás válasz0/11ms564 KiB
8Hibás válasz0/12ms316 KiB
9Elfogadva1/14ms1332 KiB
10Elfogadva1/14ms1316 KiB
11Elfogadva1/14ms1332 KiB
12Hibás válasz0/11ms380 KiB
13Hibás válasz0/11ms500 KiB
14Hibás válasz0/11ms316 KiB
15Hibás válasz0/12ms316 KiB
16Hibás válasz0/12ms544 KiB
17Hibás válasz0/12ms316 KiB
18Hibás válasz0/11ms316 KiB
19Hibás válasz0/12ms316 KiB
20Hibás válasz0/11ms316 KiB
21Hibás válasz0/27ms1332 KiB
22Hibás válasz0/27ms1400 KiB
23Hibás válasz0/27ms1404 KiB
24Hibás válasz0/310ms2432 KiB
25Hibás válasz0/312ms2268 KiB
26Hibás válasz0/36ms1772 KiB
27Hibás válasz0/36ms1908 KiB
28Hibás válasz0/39ms3184 KiB
29Hibás válasz0/39ms3248 KiB
30Hibás válasz0/314ms3248 KiB