226452026-01-15 13:13:42badamTársaság (50)cpp17Elfogadva 50/5012ms932 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;


struct Edge {
    int to;
    long long weight;
};

int N, K;
vector<vector<Edge>> adj;
int markers_used;



long long dfs(int u, long long limit) {
    long long max_dist_from_subtree = 0;

    for (auto& edge : adj[u]) {

        long long dist_child = dfs(edge.to, limit);


        if (dist_child + edge.weight > limit) {
            markers_used++;

        } else {


            max_dist_from_subtree = max(max_dist_from_subtree, dist_child + edge.weight);
        }
    }
    return max_dist_from_subtree;
}

bool check(long long limit) {
    markers_used = 0;
    dfs(1, limit);
    return markers_used <= K;
}

int main() {

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    if (!(cin >> N >> K)) return 0;

    adj.resize(N + 1);

    for (int i = 2; i <= N; ++i) {
        int parent;
        long long time;
        cin >> parent >> time;

        adj[parent].push_back({i, time});
    }


    long long left = 0, right = 20000000000000LL;
    long long ans = right;

    while (left <= right) {
        long long mid = left + (right - left) / 2;
        if (check(mid)) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }

    cout << ans << endl;

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/06ms564 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/31ms316 KiB
9Elfogadva3/32ms316 KiB
10Elfogadva3/34ms568 KiB
11Elfogadva3/34ms564 KiB
12Elfogadva3/37ms700 KiB
13Elfogadva4/48ms732 KiB
14Elfogadva4/48ms820 KiB
15Elfogadva4/49ms932 KiB
16Elfogadva4/410ms820 KiB
17Elfogadva4/412ms820 KiB