252652026-02-18 21:56:15xxxTársaság (50)cpp17Hibás válasz 7/5010ms916 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

#define int long long

vector<vector<pair<int, int> > > adj;
int ans = 0;
int m;
vector<int> dist;

void dfs(int v) {
    int distmx = 0;
    for(auto [u, w] : adj[v]) {
        dfs(u);
        distmx = max(distmx, dist[u]+w);
    }
    //cout << v << ' ' << m << ' ' << distmx << endl;

    if (distmx > m) {
        ans++;
        dist[v] = 0;
    } else {
        dist[v] = distmx;
    }
    return;
}

signed main() {
    int n, k;
    cin >> n >> k;
    adj.resize(n+1);

    dist.assign(n+1, 0);
    for(int i = 2; i <= n; i++) {
        int x, y;
        cin >> x >> y;

        adj[x].push_back({i, y});
    }

    int l = 0, r = 1000;
    int realans = 1000;

    while(l <= r) {
        //cout << l << ' ' << r << endl;
        m = (l+r)/2;

        ans = 0;
        dfs(1);

        if (ans <= k) {
            realans = min(realans, m);
            r = m-1;
        } else {
            l = m+1;
        }
    }

    cout << realans << endl;



}
/*
5 1
1 5
1 2
2 4
2 2
*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
base7/50
1Elfogadva0/01ms508 KiB
2Hibás válasz0/06ms564 KiB
3Hibás válasz0/31ms316 KiB
4Hibás válasz0/31ms316 KiB
5Elfogadva3/31ms316 KiB
6Hibás válasz0/31ms316 KiB
7Hibás válasz0/31ms316 KiB
8Hibás válasz0/32ms316 KiB
9Hibás válasz0/32ms460 KiB
10Hibás válasz0/33ms564 KiB
11Hibás válasz0/34ms564 KiB
12Hibás válasz0/36ms564 KiB
13Hibás válasz0/47ms732 KiB
14Hibás válasz0/48ms756 KiB
15Hibás válasz0/48ms856 KiB
16Elfogadva4/49ms916 KiB
17Hibás válasz0/410ms888 KiB