251572026-02-18 09:44:47szabelrTársaság (50)cpp17Hibás válasz 7/5014ms884 KiB
#include <iostream>
#include <vector>
using namespace std;
long long dfs(int v, int parent,
         vector<vector<pair<int, int>>>& adj,
         int &count,long long x,
         vector<int> &ertekek)
{
    ertekek[v]=0;
    long long maxi=0;
    for(auto to:adj[v])
    {
        if(to.first!=parent and ertekek[v]!=-1)
        {
            maxi=max(maxi,dfs(to.first,v,adj,count,x,ertekek)+to.second);
        }
    }
    if(maxi>x)
    {
        ertekek[v]=-1;
        count++;
        return 0;
    }
    return maxi;

}
bool joe(long long x,
         vector<vector<pair<int, int>>>& adj,
         int n,int k)
{
    int count=0;
    vector<int> ertekek(n+1);
    dfs(1,-1,adj,count,x,ertekek);
    if(count<=k)
        return true;
    else
        return false;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,k;
    cin >> n>>k;
    vector<vector<pair<int, int>>> adj(n + 1);
    for (int i = 2; i <= n; i++)
    {
        int a, b;
        cin >> a >> b;
        adj[a].push_back({ i,b });
    }
    long long cmin = 0;
    long long cmax = 1000000000000000;
    long long res=-1;
    while (cmin <= cmax)
    {
        long long mid = (cmin + cmax) / 2;
        if (joe(mid, adj,n,k))
        {
            res=mid;
            cmax = mid - 1;
        }
        else
            cmin = mid + 1;
    }
    cout<<res;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base7/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/07ms656 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/33ms532 KiB
10Hibás válasz0/34ms316 KiB
11Hibás válasz0/34ms568 KiB
12Hibás válasz0/37ms644 KiB
13Hibás válasz0/48ms564 KiB
14Hibás válasz0/49ms884 KiB
15Hibás válasz0/412ms744 KiB
16Elfogadva4/413ms820 KiB
17Hibás válasz0/414ms820 KiB