226492026-01-15 13:29:13sklausTársaság (50)cpp17Elfogadva 50/5012ms1004 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

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

int n, k;
int cnt;
vector<vector<Edge>> adj;

long long dfs(int u, long long limit) {
    long long max_dist = 0;
    for (auto& e : adj[u]) {
        long long d = dfs(e.to, limit);
        if (d + e.w > limit) {
            cnt++;
        } else {
            max_dist = max(max_dist, d + e.w);
        }
    }
    return max_dist;
}

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 p;
        long long t;
        cin >> p >> t;
        adj[p].push_back({i, t});
    }

    long long l = 0, r = 20000000000000LL, ans = r;

    while (l <= r) {
        long long mid = l + (r - l) / 2;
        cnt = 0;
        dfs(1, mid);
        if (cnt <= k) {
            ans = mid;
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }

    cout << ans << "\n";
    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/32ms316 KiB
9Elfogadva3/32ms316 KiB
10Elfogadva3/34ms528 KiB
11Elfogadva3/34ms616 KiB
12Elfogadva3/37ms564 KiB
13Elfogadva4/47ms564 KiB
14Elfogadva4/48ms756 KiB
15Elfogadva4/48ms820 KiB
16Elfogadva4/412ms1004 KiB
17Elfogadva4/412ms820 KiB