154432025-02-19 16:26:01feheristvanTársaság (50)cpp17Wrong answer 7/5025ms1000 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

const int INF = 1e9;

struct Edge {
    int to, weight;
};

int N, K;
vector<vector<Edge>> tree;
vector<int> maxDist;

void dfs(int node, int parent, int dist) {
    maxDist[node] = dist;
    for (auto &edge : tree[node]) {
        if (edge.to != parent) {
            dfs(edge.to, node, dist + edge.weight);
        }
    }
}

bool canAchieve(int maxTime) {
    vector<int> candidates;
    
    for (int i = 2; i <= N; i++) { 
        if (tree[i].size() == 1) { // Leaf nodes
            candidates.push_back(maxDist[i]);
        }
    }
    
    sort(candidates.rbegin(), candidates.rend()); // Sort descending
    
    if (candidates.size() <= K) return true; // If leaves are fewer than K, we can select all

    return candidates[K] <= maxTime;
}

int binarySearch() {
    int lo = 0, hi = INF, ans = INF;
    
    while (lo <= hi) {
        int mid = (lo + hi) / 2;
        if (canAchieve(mid)) {
            ans = mid;
            hi = mid - 1;
        } else {
            lo = mid + 1;
        }
    }
    
    return ans;
}

int main() {
    cin >> N >> K;
    tree.resize(N + 1);
    maxDist.resize(N + 1, 0);
    
    for (int i = 2; i <= N; i++) {
        int P, T;
        cin >> P >> T;
        tree[P].push_back({i, T});
        tree[i].push_back({P, T});
    }

    dfs(1, -1, 0);
    
    cout << binarySearch() << endl;
    
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base7/50
1Wrong answer0/01ms316 KiB
2Wrong answer0/012ms608 KiB
3Wrong answer0/31ms508 KiB
4Wrong answer0/31ms316 KiB
5Accepted3/31ms328 KiB
6Wrong answer0/31ms316 KiB
7Wrong answer0/32ms420 KiB
8Wrong answer0/32ms432 KiB
9Wrong answer0/34ms316 KiB
10Wrong answer0/37ms608 KiB
11Wrong answer0/38ms688 KiB
12Wrong answer0/312ms756 KiB
13Wrong answer0/414ms748 KiB
14Wrong answer0/417ms924 KiB
15Wrong answer0/419ms1000 KiB
16Accepted4/421ms820 KiB
17Wrong answer0/425ms956 KiB