9267 2024. 02. 19 16:01:16 PallanekPéter Társaság (50) cpp17 Hibás válasz 42/50 13ms 4452 KiB
#include <bits/stdc++.h>
using namespace std;

int db = 0;
long long mid = 0;

vector<vector<pair<int,int>>> graf;


int bejaras(int u) {
    int mx=0;
    for(pair<int,int> v:graf[u]){
        int ossz = bejaras(v.first)+v.second;
        if(ossz > mid) {
            ossz = 0;
            db++;
        }
        mx=max(mx, ossz);
    }
    return mx;
}

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    int n, k;
    cin >> n >> k;
    graf.resize(n+1);

    for(int i=2;i<=n;i++){
        long long u, v;
        cin >> u >> v;
        graf[u].push_back({i, v});
    }

    long long l = 0, r = 1e13;
    while(l<r){
        mid=(l+r)/2;
        bejaras(1);
        if(db<=k){
            r = mid;
        } else{
            if(l + 1 == r) break;
            l = mid;
        }
        db = 0;
    }
    cout << r << endl;
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 42/50
1 Elfogadva 0/0 3ms 1896 KiB
2 Elfogadva 0/0 8ms 2548 KiB
3 Elfogadva 3/3 3ms 2292 KiB
4 Elfogadva 3/3 3ms 2508 KiB
5 Elfogadva 3/3 3ms 2740 KiB
6 Elfogadva 3/3 3ms 2928 KiB
7 Elfogadva 3/3 3ms 2828 KiB
8 Elfogadva 3/3 3ms 2972 KiB
9 Elfogadva 3/3 4ms 3240 KiB
10 Elfogadva 3/3 6ms 3500 KiB
11 Elfogadva 3/3 6ms 3636 KiB
12 Elfogadva 3/3 8ms 3680 KiB
13 Elfogadva 4/4 8ms 3816 KiB
14 Elfogadva 4/4 8ms 3920 KiB
15 Hibás válasz 0/4 10ms 3932 KiB
16 Elfogadva 4/4 13ms 4376 KiB
17 Hibás válasz 0/4 13ms 4452 KiB