我认为它的思路是正确的,但是出现了一些 WA。
另外为什么洛谷上炼焦三发都是 UKE?
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int SIZE=1e5+10;
int n,k,gw[SIZE],ans=0,dep[SIZE];
vector<int> edge[SIZE];
queue<int> que;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>gw[i];
if(gw[1]!=1) ans++;
for(int i=2;i<=n;i++) if(gw[i]==i) gw[i]=1,ans++;
for(int i=2;i<=n;i++) edge[gw[i]].push_back(i);
que.push(1);
while(!que.empty()){
int u=que.front();
que.pop();
for(int v:edge[u]){
dep[v]=dep[u]+1;
if(dep[v]>k) dep[v]=1,ans++;
que.push(v);
}
}
cout<<ans<<endl;
return 0;
}