噢莫加纳加加加 • 4天前
#include<bits/stdc++.h>
using namespace std;
const int maxn=200005;
int n,t[maxn],vis[maxn],dep[maxn],ans=1e7+5,cnt=0;
void dfs(int node,int k){
// cout<<node<<" "<<k<<endl;
if(vis[node]){
if(vis[node]!=cnt) return;
ans=min(ans,k-dep[node]);
return;
}
dep[node]=k;
vis[node]=cnt;
dfs(t[node],k+1);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&t[i]);
for(int i=1;i<=n;i++){
++cnt;
if(!vis[i]) dfs(i,1);
}
printf("%d",ans);
return 0;
}
评论:
请先登录,才能进行评论