4484 2023. 03. 28 13:58:24 ZsofiaKeresztely Társaság (50) cpp14 Accepted 50/50 18ms 5224 KiB
#include <bits/stdc++.h>
using namespace std;
#define pii pair<ll, ll>
#define fi first
#define se second
typedef long long ll;
vector<vector<pii> > g;

pii dist(int v, ll val){
    pii r = {0, 0};
    for (pii x : g[v]){
        pii d = dist(x.fi, val);
        r.se += d.se;
        if (d.fi + x.se > val){
            r.fi = max(r.fi, (ll)0);
            r.se++;
        }
        else{
            r.fi = max(r.fi, d.fi + x.se);
        }
    }
    return r;
}

int main()
{
    int n, k;
    cin >> n >> k;
    g.resize(n+1);
    for (int i=2; i<=n; i++){
        int a, b;
        cin >> a >> b;
        g[a].push_back({i, b});
    }
    ll l = -1, r = 1e13;
    while (l + 1 < r){
        ll m = (l + r) / 2;
        if (dist(1, m).se > k){
            l = m;
        }
        else{
            r = m;
        }
    }
    cout << r;
}
Subtask Sum Test Verdict Time Memory
base 50/50
1 Accepted 0/0 3ms 1884 KiB
2 Accepted 0/0 9ms 2564 KiB
3 Accepted 3/3 3ms 2280 KiB
4 Accepted 3/3 3ms 2520 KiB
5 Accepted 3/3 2ms 2608 KiB
6 Accepted 3/3 3ms 2708 KiB
7 Accepted 3/3 3ms 2940 KiB
8 Accepted 3/3 4ms 3300 KiB
9 Accepted 3/3 4ms 3312 KiB
10 Accepted 3/3 7ms 3484 KiB
11 Accepted 3/3 8ms 3528 KiB
12 Accepted 3/3 10ms 3836 KiB
13 Accepted 4/4 12ms 4084 KiB
14 Accepted 4/4 13ms 4320 KiB
15 Accepted 4/4 14ms 4676 KiB
16 Accepted 4/4 17ms 5032 KiB
17 Accepted 4/4 18ms 5224 KiB