minimario

e-olymp: Parent

Jun 23rd, 2015
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <utility>
  2. #define pb push_back
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <vector>
  7.  
  8. using namespace std;
  9. vector<int> g[100005];
  10. int visited[100005];
  11. int start[100005];
  12. int finish[100005];
  13. int time = 0;
  14.  
  15.  
  16. void dfs(int s) {
  17.     time += 1;
  18.     start[s] = time;
  19.     visited[s] = 1;
  20.     for (int i=0; i < g[s].size(); i++) {
  21.         if (visited[g[s][i]] == 0) {
  22.             dfs(g[s][i]);
  23.         }
  24.     }
  25.     finish[s] = time;
  26. }
  27. int main() {
  28.     int root = -1;
  29.     int v;
  30.     cin >> v;
  31.     for (int i=1; i <= v; i++) {
  32.         int conn;
  33.         cin >> conn;
  34.         if (conn != 0) {
  35.             g[conn].pb(i);
  36.         }
  37.         else {
  38.             root = i;
  39.         }
  40.     }
  41.  
  42.     int q;
  43.     cin >> q;
  44.     dfs(root);
  45.  
  46.     for (int i=0; i < q; i++) {
  47.         int x, y;
  48.         cin >> x >> y;
  49.         if (start[x]<start[y] && finish[x]>=finish[y]) {
  50.             cout << 1 << endl;
  51.         }
  52.         else {cout << 0 << endl;}
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment