235232026-01-24 11:18:01matemakaiTársaság (50)cpp17Elfogadva 50/5017ms780 KiB
#include <bits/stdc++.h>
using namespace std;

long long dfs(int node, vector<vector<pair<int, int>>>& adj, int& c, long long& x, int own_w) {
	
	long long max_d = 0;

	for (auto [next, w] : adj[node]) {
		max_d = max(max_d, dfs(next, adj, c, x, w));
	}
	if (max_d + own_w > x) {
		++c;
		max_d = 0;
	} else {
		max_d += own_w;
	}
	return max_d;
}

int main() {
	int n, k;
	cin >> n >> k;
	vector<vector<pair<int, int>>> adj(n);
	for (int i = 1; i < n; ++i) {
		int a, w;
		cin >> a >> w;
		--a;
		adj[a].push_back({i, w});
	}
	
	long long l = 0, r = 1e14;

	long long ans = 1e14;

	while (l <= r) {
		long long m = (l + r) / 2;

		int c = 0;
		dfs(0, adj, c, m, 0);

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

	cout << ans << endl;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/08ms564 KiB
3Elfogadva3/32ms316 KiB
4Elfogadva3/32ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/33ms316 KiB
9Elfogadva3/34ms316 KiB
10Elfogadva3/34ms500 KiB
11Elfogadva3/36ms564 KiB
12Elfogadva3/39ms580 KiB
13Elfogadva4/410ms564 KiB
14Elfogadva4/412ms704 KiB
15Elfogadva4/413ms748 KiB
16Elfogadva4/416ms568 KiB
17Elfogadva4/417ms780 KiB