Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. bool a[101][101];
  8. int n,res,ans;
  9. bool t;
  10.  
  11. bool pr()
  12. {
  13.     for (int i=1;i<=n;i++)
  14.     {
  15.         for (int j=1;j<=n;j++)
  16.             if (a[j][i]) res++;
  17.         if (res!=1) return false;
  18.         res=0;
  19.     }
  20.     return true;
  21. }
  22.  
  23. int dfs(int x,int y)
  24. {
  25.  
  26.     //cout<<res<<endl;
  27.     if (x==y && t) return 0;// Если поставить сюда return (res-1) тогда не работает
  28.         res++;
  29.  
  30.     for (int i=1;i<=n;i++)
  31.         if (a[x][i]){t=true; dfs(i,y);}
  32. }
  33.  
  34. int main()
  35. {
  36.     cin>>n;
  37.     for (int i=1;i<=n;i++)
  38.     {
  39.         int x;
  40.         cin>>x;
  41.         a[i][x]=true;
  42.     }
  43.  
  44.     if (!pr()){cout<<"-1"; return 0;}
  45.     ans=1;
  46.     for (int i=1,d=0;i<=n;i++)
  47.     {
  48.         res=0; t=false;
  49.         dfs(i,i);
  50.         d=res;
  51.         if (d%2==0) d/=2;
  52.        // cout<<d<<"%%"<<endl;
  53.         ans=(ans*d)/__gcd(ans,d);
  54.     }
  55.     cout<<ans;
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement