176092025-08-09 15:47:49BucsMateTársaság (50)cpp17Wrong answer 0/509ms968 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 = 10;
    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/06ms760 KiB
3Wrong answer0/31ms316 KiB
4Wrong answer0/31ms508 KiB
5Wrong answer0/31ms316 KiB
6Wrong answer0/31ms316 KiB
7Wrong answer0/31ms316 KiB
8Wrong answer0/32ms316 KiB
9Wrong answer0/33ms316 KiB
10Wrong answer0/33ms564 KiB
11Wrong answer0/34ms564 KiB
12Wrong answer0/34ms564 KiB
13Wrong answer0/46ms564 KiB
14Wrong answer0/47ms820 KiB
15Wrong answer0/48ms856 KiB
16Wrong answer0/48ms848 KiB
17Wrong answer0/49ms968 KiB