Submission #1367816

#TimeUsernameProblemLanguageResultExecution timeMemory
1367816maya_sCat in a tree (BOI17_catinatree)C++20
0 / 100
1 ms344 KiB
#include<bits/stdc++.h>
#pragma GCC optimize("O3","unroll-loops")
using namespace std;
typedef long long ll;
const ll SIZE = 200200;
vector<ll> g[SIZE];
ll v[SIZE];

ll dfs(ll node, ll d, ll &cnt){
    ll n = g[node].size();
    for(ll i = 0; i < n; i++) v[i] = dfs(g[node][i], d, cnt);
    sort(v, v + n);
    ll idx = n-1;
    while(idx >= 0 && v[idx] == d) idx--;
    if(idx == -1) {cnt++; return 1;}
    n = idx, idx = 0;
    while(idx < n-1 && v[idx] + v[idx+1] < d) cnt--, idx++;
    return v[idx] + 1;
}

ll solve(ll n, ll k){
    if(k >= n) return 1;
    vector<vector<ll>> dp(n, vector<ll>(k+2));
    ll cnt = 0;
    dfs(0, k, cnt);
    return cnt;
}

int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll n, k; cin >> n >> k;
    for(ll i = 1; i <= n-1; i++){
        ll p; cin >> p;
        g[p].push_back(i);
    }
    cout << solve(n, k);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...