题解
2025-09-11 21:37:47
发布于:广东
3阅读
0回复
0点赞
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#define M 210000
#define INF 123123123
using namespace std;
int nx[M]={0},n,vis[M]={0},t=0;
bool b[M]={0};
stack<int> s;
int bfs(int x){
vis[x]=++t;
if(nx[x]==x) return INF;
b[x]=1; s.push(x);
while(!vis[nx[x]]){
x=nx[x];
vis[x]=++t;
b[x]=1; s.push(x);
}
if(b[nx[x]]){
while(!s.empty()) b[s.top()]=0,s.pop();
return vis[x]-vis[nx[x]]+1;
}else{
while(!s.empty()) b[s.top()]=0,s.pop();
return INF;
}
}
int main(){
scanf("%d",&n); int minn=INF;
for(int i=1;i<=n;i++) scanf("%d",nx+i);
for(int i=1;i<=n;i++) if(!vis[i])
minn=min(minn,bfs(i));
cout<<minn<<endl;
return 0;
}
这里空空如也





有帮助,赞一个