154172025-02-19 13:13:31999Társaság (50)cpp17Elfogadva 50/5017ms892 KiB
// Source: https://usaco.guide/general/io

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

#define int long long

int p;

int dfs(vector<vector<pair<int,int>>>& v,int u, int m, int& c,int fp){
    int md=0;
    for(auto i : v[u]){
        md=max(md,dfs(v,i.first,m,c,i.second));
    }
    md=md+fp;
    if(md>m){
        c++;
        return 0;
    }
    else return md;

}

bool boo(vector<vector<pair<int,int>>>& v, int m){
    int c=0;
    for(auto i : v[0]){
        dfs(v,i.first,m,c,i.second);
    }
    if(c<=p)return 1;
    return 0;
}

signed main() {
    int n,k;cin>>n>>k;
    vector<vector<pair<int,int>>> v(n);
    int sum=0;
    for(int i = 1;i<n;i++){
        int a,b;cin>>a>>b;
        a--;
        v[a].push_back({i,b});
        sum+=b;
    }
    //for(auto i : v)for(auto j : i)cout<<j.first<<' '<<j.second<<endl;
    int l=-1,h=sum,m;
    while(l<h-1){
        m=(l+h)/2;
        //cout<<m<<endl;
        p=k;
        if(boo(v,m)){
            h=m;
        }
        else{
            l=m;
        }
    }
    cout<<h<<endl;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/08ms564 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms500 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/32ms316 KiB
9Elfogadva3/33ms316 KiB
10Elfogadva3/34ms548 KiB
11Elfogadva3/34ms568 KiB
12Elfogadva3/38ms644 KiB
13Elfogadva4/49ms700 KiB
14Elfogadva4/410ms564 KiB
15Elfogadva4/413ms792 KiB
16Elfogadva4/414ms844 KiB
17Elfogadva4/417ms892 KiB