信息传递
陈子骏
2018-04-02 17:39:06
```
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
const int N=2e5+500;
int n;
int t[N],rd[N];
int cir,m=N;
int main(){
memset(rd,0,sizeof(rd));
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&t[i]);
rd[t[i]]++;
}
for(int i=1;i<=n;i++)
if(!rd[i]){
rd[i]=-1;
for(int j=t[i];!(--rd[j]);j=t[j])rd[j]=-1;
}
for(int i=1;i<=n;i++){
if(rd[i]!=-1){
cir=0;
for(int j=i;j!=i||cir==0;j=t[j]){
++cir;
rd[j]=-1;
}
if(cir<m)m=cir;
}
}
printf("%d\n",m);
return 0;
}
```