176092025-08-09 15:47:49BucsMateTársaság (50)cpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/06ms760 KiB
3Hibás válasz0/31ms316 KiB
4Hibás válasz0/31ms508 KiB
5Hibás válasz0/31ms316 KiB
6Hibás válasz0/31ms316 KiB
7Hibás válasz0/31ms316 KiB
8Hibás válasz0/32ms316 KiB
9Hibás válasz0/33ms316 KiB
10Hibás válasz0/33ms564 KiB
11Hibás válasz0/34ms564 KiB
12Hibás válasz0/34ms564 KiB
13Hibás válasz0/46ms564 KiB
14Hibás válasz0/47ms820 KiB
15Hibás válasz0/48ms856 KiB
16Hibás válasz0/48ms848 KiB
17Hibás válasz0/49ms968 KiB