1025 | 2022. 02. 25 07:36:41 | Szin Attila | Társaság (50) | cpp14 | Elfogadva 50/50 | 12ms | 3988 KiB |
#include <bits/stdc++.h>
using namespace std;
#define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
using ll = long long;
const ll maxN = 2e5 + 5;
const ll MOD = 1e9 + 7;
ll n, k;
vector<vector<pair<ll, ll> > > g;
vector<ll> val, b;
ll a;
void dfs1(ll x)
{
for(pair<ll, ll> sz : g[x]) {
val[sz.first] = val[x] + sz.second;
dfs1(sz.first);
}
}
ll dfs(ll x, ll mid) {
ll maxi = 0;
for(pair<ll, ll> sz : g[x]) {
ll temp = dfs(sz.first, mid);
maxi = max(maxi, temp);
}
maxi += b[x];
if(maxi > mid) {
a++;
maxi = 0;
}
return maxi;
}
int main() {
InTheNameOfGod;
cin >> n >> k;
g.resize(n+1);
val.resize(n+1, 0);
b.resize(n+1, 0);
for(ll i = 2; i <= n; i++) {
ll x,y;
cin >> x >> y;
g[x].push_back({i, y});
b[i] = y;
}
dfs1(1);
ll maxi = 0;
for(ll i = 1; i <= n; i++) maxi = max(maxi, val[i]);
ll l = 0, r = maxi, mid, mo;
while(l < r) {
mid = (l + r) / 2;
val.assign(n+1, 0);
a = 0;
dfs(1, mid);
if(a > k) {
l = mid + 1;
}
else {
r = mid;
mo = mid;
}
}
cout << mo;
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
base | 50/50 | ||||||
1 | Elfogadva | 0/0 | 2ms | 1816 KiB | |||
2 | Elfogadva | 0/0 | 6ms | 2592 KiB | |||
3 | Elfogadva | 3/3 | 1ms | 2000 KiB | |||
4 | Elfogadva | 3/3 | 1ms | 2004 KiB | |||
5 | Elfogadva | 3/3 | 1ms | 2016 KiB | |||
6 | Elfogadva | 3/3 | 1ms | 2028 KiB | |||
7 | Elfogadva | 3/3 | 1ms | 2052 KiB | |||
8 | Elfogadva | 3/3 | 2ms | 2084 KiB | |||
9 | Elfogadva | 3/3 | 3ms | 2300 KiB | |||
10 | Elfogadva | 3/3 | 4ms | 2388 KiB | |||
11 | Elfogadva | 3/3 | 4ms | 2612 KiB | |||
12 | Elfogadva | 3/3 | 6ms | 2848 KiB | |||
13 | Elfogadva | 4/4 | 7ms | 2976 KiB | |||
14 | Elfogadva | 4/4 | 8ms | 3180 KiB | |||
15 | Elfogadva | 4/4 | 8ms | 3316 KiB | |||
16 | Elfogadva | 4/4 | 10ms | 3516 KiB | |||
17 | Elfogadva | 4/4 | 12ms | 3988 KiB |