#5 #8 #10 比答案少1 #7 比答案多1
#include<bits/stdc++.h>
using namespace std;
int n;
int h[1145140],e[1145140],ne[1145140],idx;
int w[1145140][2];
int c[1145140],fa[1145140],p[1145140];
int q[1145140],l,r;
int cnt[1145140],rr[1145140];
int root,gen,dgl,ans,s;
inline void add(int a,int b)
{
idx++;
ne[idx]=h[a];
e[idx]=b;
h[a]=idx;
}
inline void bfs()
{
for(int i=1;i<=n;i++)
if(!c[i])
q[r++]=i;
else
p[i]=c[i];
while(l<=r)
{
int x=q[l++];
if(x)
cnt[x]=1;
c[fa[x]]--;
if(!c[fa[x]])
q[r++]=fa[x];
}
/*for(int i=1;i<=n;i++)
{
cout<<rr[i]<<' '<<p[i]<<'\n';
}*/
/*if(!rr[i]&&p[i])
cnt[i]=0;*/
//cout<<cnt[i]<<" ";
}
inline void dfs(int x)
{
cnt[x]=1;
//cout<<x<<' ';
int ff=0;
int op=0,cnt=0,res=0;
for(int i=h[x];i;i=ne[i])
{
int y=e[i];
if(s!=y)
{
dfs(y);
ff++;
if(w[y][0]>=w[y][1])
{
w[x][0]+=w[y][0];
op=1;
}
else
{
w[x][0]+=w[y][1];
cnt=w[y][0];
res=w[y][1];
}
}
}
if(ff)
{
w[x][1]=max(w[x][1],w[x][0]);
if(!op)
{
w[x][1]-=res;
w[x][1]+=cnt;
}
w[x][1]++;
}
}
inline void find()
{
for(int i=1;i<=n;i++)
if(!cnt[i])
{
memset(w,0,sizeof w);
dgl=0;
root=fa[i];
s=i;
//cout<<root<<'\n';
//cout<<"-----------------"<<'\n';
dfs(i);
//cout<<"\n-----------------"<<'\n';
dgl=max(w[i][1],w[i][0]);
// for(int j=1;j<=n;j++)
//cout<<j<<' '<<fa[j]<<' '<<w[j][0]<<' '<<w[j][1]<<'\n';
memset(w,0,sizeof w);
w[root][1]=1;
w[root][0]=-1e9;
dfs(i);
//cout<<"\n-------------"<<'\n';
/*for(int j=h[i];j;j=ne[j])
{
int y=e[j];
if(y==fa[i])
ress+=w[y][0];
else
ress+=max(w[y][1],w[y][0]);
}*/
dgl=max(dgl,w[i][0]);
//for(int j=1;j<=n;j++)
// cout<<j<<' '<<fa[j]<<' '<<w[j][0]<<' '<<w[j][1]<<'\n';
//add(i,++gen);
//dfs(i);
ans+=dgl;
//cout<<i<<' '<<ans<<'\n';
//break;
}
}
int main()
{
cin>>n;
gen=n;
for(int i=1;i<=n;i++)
{
int a;
cin>>a;
//if(a!=i)
//{
add(a,i);
fa[i]=a;
//pre[a]=i;
c[a]++;
rr[i]++;
//}
}
//cout<<c[1]<<'\n';
bfs();
find();
cout<<ans;
return 0;
}