#include<bits/stdc++.h> #define MOD #define MAXN 100005 #define MAXM #define LL long long #define ll long long #define mem(a) memset(a,0,sizeof(a)) #define memmax(a) memset(a,0x3f,sizeof(a)) //#define int long long usingnamespace std; inlineintread(){ int x=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9'){ if (ch=='-') f=-1; ch=getchar(); } while (ch>='0'&&ch<='9'){ x=(x*10)+(ch-'0'); ch=getchar(); } return x*f; } int to[MAXN],in[MAXN],vis[MAXN],vis2[MAXN]; voiddfs(int u){ vis[u]=true; if (--in[to[u]]==0){ dfs(to[u]); } } int dp[MAXN]; voiddfs2(int u){ if (vis2[u]){ dp[u]=0; return ; } vis2[u]=true; dfs2(to[u]); dp[u]=dp[to[u]]+1; } //#undef int intmain(){ //#define int long long int n; scanf("%d",&n); for (registerint i=1;i<=n;++i){ to[i]=read(); ++in[to[i]]; } for (registerint i=1;i<=n;++i){ if (!vis[i]&&!in[i]){ dfs(i); } } int ans=0; for (registerint i=1;i<=n;++i){ if (!vis[i]&&!vis2[i]){ dfs2(i); ans+=dp[i]; } } printf("%d\n",ans); }