题目来源:http://www.luogu.org/problem/show?pid=2661
//%拜神犇tys
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=200005;
int vis[maxn];//这个点是第几次搜到的
int fa[maxn];
int dfn[maxn];//深度记录
int vi;
int ans=2147483647,n,df;
inline void dfs(int a,int b){
vis[a]=vi;
dfn[a]=b;
int nex=fa[a];
if(!vis[nex])dfs(nex,b+1);
else if(vis[nex]==vi){
ans=min(ans,b-dfn[nex]+1);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&fa[i]);
}
for(int i=1;i<=n;i++){
if(!vis[i]){
vi++;
dfs(i,1);
}
}
cout<<ans<<"\n";
return(0);
}