Submission #1306448

#TimeUsernameProblemLanguageResultExecution timeMemory
1306448BigBadBullyCat in a tree (BOI17_catinatree)C++20
51 / 100
314 ms589824 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define ff first
#define ss second
const int inf = 2e18;
const int mod = 1e9 + 7;
const int mxn = 2e5+1;

int exp(int x,int n)
{
    int res = 1;
    for(;n>0;res=(n%2?res*x%mod:res),x=x*x%mod,n/=2);
    return res;
}

int inv(int x)
{
    return exp(x,mod-2);
}

void solve()
{
    int n,d;
    cin >> n >> d;
    vector<vector<int>> g(n);
    for(int i = 1;i< n; i++)
    {
        int x;
        cin >> x;
        g[i].push_back(x);
        g[x].push_back(i);
    }
    vector<vector<int>> dist(n,vector<int>(n,-1));
    for(int rt = 0;rt<n;rt++)
    {
        function<void(int,int)> dfs = [&](int cur,int prev){
            dist[rt][cur] = dist[rt][prev]+1;
            for(int a : g[cur])
                if(a!=prev)
                    dfs(a,cur);
        };
        dfs(rt,rt);
    }
    int cnt = 0;
    vector<int> vis(n,0);
    function<void(int)> apply=[&](int x)
    {
        if(x < 0 || vis[x])return;
        cnt++;
        for(int i = 0;i < n; i++)
            if(dist[x][i]<d)
                vis[i] = 1;
    };
    vector<int> id(n);
    for(int i = 0; i< n; i++)id[i] = i;
    sort(id.begin(),id.end(),[&](int a,int b){return dist[0][a]>dist[0][b];});
    
    for(int i : id)
    {
        if(vis[i])continue;
        apply(i);
        int maxi = -1;
        for(int j= 0;j < n;j++)
        {
            if(vis[j])continue;
            if(maxi == -1 || dist[j][i] > dist[maxi][i])
                maxi = j;
        }
        apply(maxi);
    }
    cout << cnt << '\n';
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    //cin >>t;
    while (t--)
        solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...