|
楼主
楼主 |
发表于 2018-9-19 19:45:51
|
只看该作者
- #include<iostream>
- using namespace std;
- const int N=200010;
- int n,t[N],r[N],ans=0x7fffff,v[N];
- void dfs(int x,int s,int l)
- {
- if(x==s&&l)
- {
- ans=min(ans,l);
- return;
- }
- if(!v[t[x]])
- {
- v[t[x]]=1;
- dfs(t[x],s,l+1);
- }
- }
- void del(int x)
- {
- v[x]=-1;
- r[t[x]]--;
- if(!r[t[x]]&&v[t[x]]!=-1)del(t[x]);
- }
- int main()
- {
- cin>>n;
- for(int i=1;i<=n;i++)
- {
- cin>>t[i];
- r[t[i]]++;
- }
- for(int i=1;i<=n;i++)
- if(!r[i]&&v[i]!=-1)del(i);
- for(int i=1;i<=n;i++)
- if(!v[i])dfs(i,i,0);
- cout<<ans<<endl;
- }
复制代码 |
|