题目链接
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200000+10;
vector<int> g[maxn];
int vis[maxn];
int cn;
int res[maxn],ti[maxn];
void dfs(int p,int t){
if(vis[p] == 0){
ti[p] = t;
vis[p] = 1;
if(vis[g[p][0]] != -1)dfs(g[p][0],t+1);
vis[p] = -1;
return;
}
else if(vis[p] == 1){
res[++cn] = t-ti[p];
vis[p] = -1;
return;
}
else if(vis[p] == -1){
return ;
}
}
int main(){
int n;
cin>>n;
for(int i = 1;i <= n;i++){
int x;
cin>>x;
g[i].push_back(x);
}
for(int i = 1;i <= n;i++){
if(vis[i] != -1)dfs(i,0);
}
int ans = 1e9;
for(int i = 1;i <= cn;i++){
ans = min(ans,res[cn]);
}
cout<<ans;
return 0;
}