思路:
1肯定要连1,然后如果从现在开始下x的深度大于k,那就直接连上去
c o d e code code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int MAXN = 1e5 + 10;
int n, k, ans;
vector<int> b[MAXN];
int dfs(int x, int flag) {
int r = 0;
for(int i = 0; i < b[x].size(); i ++)
r = max(r, dfs(b[x][i], x));
if(++r >= k && flag) r = 0, ans ++;
return r;
}
int main() {
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i ++) {
int x;
scanf("%d", &x);
if(i == 1) {
if(x != 1) ans ++;
}
else b[x - 1].push_back(i - 1);
}
dfs(0, 0);
printf("%d", ans);
return 0;
}