176122025-08-09 16:14:58BucsMateTársaság (50)cpp17Elfogadva 50/5017ms820 KiB
#include <iostream>
#include <vector>

using namespace std;

vector<vector<int>> adj;
vector<long long> cost;

long long checkSolution(long long maxTime, int currNode, int &nrBoss)
{
    long long maxDist = 0;
    for(int child : adj[currNode]){
        maxDist = max(maxDist, cost[child] + checkSolution(maxTime, child, nrBoss));
    }

    if(maxDist + cost[currNode] > maxTime){
        //cout << currNode << " ";
        nrBoss++;
        return -cost[currNode];
    }
    return maxDist;
}

int main()
{
    int N, K;
    cin >> N >> K;
    adj.resize(N+1);
    cost.assign(N+1, 0);
    for(int i = 2; i <= N; ++i){
        int parent;
        cin >> parent >> cost[i];
        adj[parent].push_back(i);
    }

    long long left = 0, right = 1e14;
    while(left < right){
        long long mid = (left + right)/2;
        int nrBoss = 0;
        checkSolution(mid, 1, nrBoss);
        //cout << endl << "nrBoss: " << nrBoss;

        if(nrBoss > K){
            left = mid+1;
            //cout << "bal\n\n";
        }
        else{
            right = mid;
            //cout << "jobb\n\n";
        }
    }
    //cout << endl;
    cout << right;

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/08ms564 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/32ms500 KiB
9Elfogadva3/34ms316 KiB
10Elfogadva3/34ms316 KiB
11Elfogadva3/36ms596 KiB
12Elfogadva3/39ms624 KiB
13Elfogadva4/410ms564 KiB
14Elfogadva4/412ms564 KiB
15Elfogadva4/413ms760 KiB
16Elfogadva4/416ms820 KiB
17Elfogadva4/417ms820 KiB