样例没过作死交了一发然而AC了。
按照样例应该输出2,但我这个输出1,但是AC了。
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*t;
}
const int SIZE=600005;
int nxt[SIZE],ver[SIZE],head[SIZE],tot;
inline void add(int x,int y){
ver[++tot]=y,nxt[tot]=head[x],head[x]=tot;
}
int n,ans,visit[SIZE],fath[SIZE],dep[SIZE],stac[SIZE],q[SIZE],cnt,vis[SIZE];
inline void BFS(){
stac[1]=1,q[1]=1,dep[1]=1;
int h=1,t=1;
while(h<=t){
int x=q[h];h++;
for(register int i=head[x];i;i=nxt[i]){
if(ver[i]!=fath[x])
dep[ver[i]]=dep[x]+1,q[++t]=ver[i],stac[++cnt]=ver[i];
}
}
}
void Put(int x,int dis){
if(dis>2)return;
vis[x]=1;
for(register int i=head[x];i;i=nxt[i])Put(ver[i],dis+1);
}
void Solve(){
while(cnt){
int x=stac[cnt];cnt--;
if(!vis[x])Put(fath[fath[x]],0),ans++;
}
}
int main(){
int n=read();
for(register int i=2;i<=n;i++)
fath[i]=read(),add(fath[i],i),add(i,fath[i]);
BFS(),Solve();
printf("%d",ans);
return 0;
}