235222026-01-24 11:13:34matemakaiTársaság (50)cpp17Hibás válasz 28/5013ms1012 KiB
#include <bits/stdc++.h>
using namespace std;

int dfs(int node, vector<vector<pair<int, int>>>& adj, int& c, int& x, int own_w) {
	
	int 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});
	}
	
	int l = 0, r = 1e6;

	int ans = 1e6;

	while (l <= r) {
		int 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
base28/50
1Elfogadva0/01ms316 KiB
2Hibás válasz0/07ms564 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/32ms540 KiB
9Elfogadva3/33ms316 KiB
10Elfogadva3/34ms508 KiB
11Hibás válasz0/34ms336 KiB
12Hibás válasz0/36ms564 KiB
13Hibás válasz0/48ms564 KiB
14Hibás válasz0/48ms572 KiB
15Hibás válasz0/49ms724 KiB
16Elfogadva4/410ms564 KiB
17Hibás válasz0/413ms1012 KiB