代码如下
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
const int N = 2e5 +5;
bool vis[N] = {false};
int ans;
int a,n[N];
int eans[N];
int dfs(int a)
{
if(vis[a])return ans - eans[a];
vis[a] = true;
ans++;
eans[a] = ans;
dfs(n[a]);
}
int main()
{
scanf("%d\n",&a);
for(int i = 1;i <= a;i++)
{
scanf("%d ",&n[i]);
}
int lans = 0x3f3f3f3f;
for(int i = 0;i <= a;i++)
{
bool vis[N] = {false};
ans = 0;
ans = dfs(a)+1;
if (ans < lans and ans > 1)lans = ans;
}
printf("%d",lans);
return 0;
}