显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=200005;
int ru[maxn],vis[maxn],q[maxn];
int n;
inline int read(){
int f=1,x=0;char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){
x=(ch^48)+(x<<3)+(x<<1);
ch=getchar();}
return x*f;
}
void del(int x){
vis[x]=1;
ru[q[x]]--;
if(ru[q[x]]==0)del(q[x]);}
int dfs(int x,int start,int l) {
if(x==start&&l!=0) return l;
if(vis[q[x]]==0){
vis[q[x]]=1;
dfs(q[x],start,l+1);
}}
int Main(){
freopen("2015message.in","r",stdin);
freopen("2015message.out","w",stdout);
int ans=maxn;
n=read();
for(int i=1;i<=n;i++){
q[i]=read();ru[q[i]]++;}
for(int i=1;i<=n;i++){
if(ru[i]==0&&vis[i]==0)del(i);}
for(int i=1;i<=n;i++){
if(vis[i]==0)ans=min(ans,dfs(i,i,0));
}
cout<<ans;
return 0;
}
int x=Main();
int main(){;}