信息传递

陈子骏

2018-04-02 17:39:06

Personal

``` #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; } ```