Advertisement
zaidhuda

J

Sep 19th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include "iostream"
  2. #include "utility"
  3. #include "algorithm"
  4. #include "set"
  5. #include "vector"
  6. #include "map"
  7. #include "iterator"
  8. #include "functional"
  9. // #include "sstream"
  10. #include "iomanip"
  11. #include "deque"
  12. #include "stack"
  13. #include "queue"
  14. #include "cstring"
  15. #include "cmath"
  16.  
  17. #define ll long long
  18. #define REP(i,n) for(ll i=0;i<n;i++)
  19. #define REPREV(i,n) for(ll i=n;i>=0;i--)
  20. #define IREP(in,i,n) for(ll i=in;i<n;i++)
  21.  
  22. #define dbg(msg) //cout << msg << endl;
  23. #define var(n,x) cout << n << " = " << x << endl;
  24.  
  25. using namespace std;
  26.  
  27. bool solve(){
  28.     int n;
  29.  
  30.     if(!(cin >> n)) return false;
  31.  
  32.     vector<int> citiesOut;
  33.  
  34.     citiesOut.push_back(0);
  35.  
  36.     REP(i, n){
  37.         int c;
  38.         cin >> c;
  39.         citiesOut.push_back(c);
  40.     }
  41.  
  42.     int c;
  43.     cin >> c;
  44.  
  45.     REP(i, c){
  46.         int a, b, flight1 = 0, flight2 = 0, skip = 0, from, to, valid1 = 1, valid2 = 1;
  47.         std::vector<int> AtoB;
  48.         std::vector<int> BtoA;
  49.         cin >> a >> b;
  50.         if (a == b) {
  51.             skip = true;
  52.         }
  53.         from = a;
  54.         AtoB.push_back(a);
  55.         for (int i = 0; i < n && !skip; ++i) {
  56.             to = citiesOut[from];
  57.             if(find(AtoB.begin(), AtoB.end(), to) == AtoB.end()){
  58.                 AtoB.push_back(to);
  59.                 from = to;
  60.             } else break;
  61.         }
  62.        
  63.         from = b;
  64.         BtoA.push_back(b);
  65.         for (int i = 0; i < n && !skip; ++i) {
  66.             to = citiesOut[from];
  67.             if(find(BtoA.begin(), BtoA.end(), to) == BtoA.end()){
  68.                 BtoA.push_back(to);
  69.                 from = to;
  70.             } else break;
  71.         }
  72.  
  73.         int intersect = AtoB.size()+BtoA.size()+1;
  74.  
  75.         REP(x, AtoB.size()){
  76.             REP(y, BtoA.size()){
  77.                 if(AtoB[x] == BtoA[y]){
  78.                     if(x+y < intersect)
  79.                     intersect = x+y;
  80.                 }
  81.             }
  82.         }
  83.  
  84.         if (intersect != AtoB.size()+BtoA.size()+1)
  85.             cout << intersect << endl;
  86.         else
  87.             cout << -1 << endl;
  88.     }
  89.  
  90.     return true;
  91. }
  92.  
  93. int main(int argv, char** argc){
  94.  
  95.     while(solve());
  96.  
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement