1023 2022. 02. 25 07:17:44 Szin Attila Társaság (50) cpp14 Hibás válasz 4/50 12ms 3600 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;

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 ret = 0;
    if(val[x] > mid) {
        val[x] = 0;
        ret++;
    }

    for(pair<ll, ll> sz : g[x]) {
        val[sz.first] = val[x] + sz.second;
        ret += dfs(sz.first, mid);
    }
    return ret;
}

int main() {
   InTheNameOfGod;

    
    
    cin >> n >> k;

    g.resize(n+1);
    val.resize(n+1, 0);

    for(ll i = 2; i <= n; i++) {
        ll x,y;
        cin >> x >> y;
        g[x].push_back({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);

        if(dfs(1, mid) > k) {
            l = mid + 1;         
        }
        else {
            r = mid - 1;
            mo = mid;
        }
    }
    cout << mo;

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 4/50
1 Elfogadva 0/0 2ms 1824 KiB
2 Hibás válasz 0/0 6ms 2536 KiB
3 Hibás válasz 0/3 1ms 2008 KiB
4 Hibás válasz 0/3 1ms 2008 KiB
5 Hibás válasz 0/3 1ms 2008 KiB
6 Hibás válasz 0/3 1ms 2028 KiB
7 Hibás válasz 0/3 1ms 2044 KiB
8 Hibás válasz 0/3 2ms 2076 KiB
9 Hibás válasz 0/3 2ms 2276 KiB
10 Hibás válasz 0/3 3ms 2356 KiB
11 Hibás válasz 0/3 4ms 2572 KiB
12 Hibás válasz 0/3 6ms 2672 KiB
13 Hibás válasz 0/4 8ms 2916 KiB
14 Hibás válasz 0/4 8ms 3120 KiB
15 Hibás válasz 0/4 8ms 3220 KiB
16 Elfogadva 4/4 10ms 3460 KiB
17 Hibás válasz 0/4 12ms 3600 KiB