#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |