#include <bits/stdc++.h>
#define int long long
using namespace std;
int a, b;
vector<int> z[200005];
deque<int> dq[200005];
void dfs(int i, int par) {
dq[i].push_front(1);
for (auto p : z[i]) {
if (p == par) continue;
dfs(p, i);
dq[p].push_front(dq[p].front());
if (dq[p].size() > dq[i].size()) dq[i].swap(dq[p]);
int up = (int)dq[p].size() -1;
for (int j = 0; j <= up; j++) {
int x = dq[p][j];
int t = max(j, b - j);
if (t < (int)dq[i].size()) x += dq[i][t];
int y = dq[i][j];
if (t < (int)dq[p].size()) y += dq[p][t];
dq[i][j] = max({dq[i][j], max(x, y)});
}
for (int j = dq[p].size() - 1; j >= 0; j--) {
if (j + 1 < (int)dq[i].size()) dq[i][j] = max(dq[i][j], dq[i][j + 1]);
}
dq[p].clear();
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> a >> b;
for (int i = 2; i <= a; i++) {
int x;
cin >> x;
x++;
z[x].push_back(i);
}
if (b == 0) {
cout << a << "\n";
return 0;
}
if (b >= a) {
cout << 1 << "\n";
return 0;
}
dfs(1, 0);
cout << dq[1][0] << "\n";
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... |