176102025-08-09 15:48:43BucsMateTársaság (50)cpp17Wrong answer 0/5017ms860 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 > maxTime || cost[currNode] > maxTime){
        nrBoss++;
        return -cost[currNode];
    }
    return maxDist;
}

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

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

        if(nrBoss > K){
            left = mid+1;
        }
        else{
            right = mid;
        }
    }
    cout << right;

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base0/50
1Accepted0/01ms316 KiB
2Wrong answer0/08ms752 KiB
3Wrong answer0/31ms500 KiB
4Wrong answer0/31ms316 KiB
5Wrong answer0/31ms316 KiB
6Wrong answer0/31ms316 KiB
7Wrong answer0/31ms424 KiB
8Wrong answer0/32ms316 KiB
9Wrong answer0/33ms316 KiB
10Wrong answer0/34ms316 KiB
11Wrong answer0/36ms552 KiB
12Wrong answer0/39ms756 KiB
13Wrong answer0/410ms788 KiB
14Wrong answer0/412ms564 KiB
15Wrong answer0/414ms568 KiB
16Wrong answer0/417ms832 KiB
17Wrong answer0/417ms860 KiB