Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <utility>
- #define pb push_back
- #include <iostream>
- #include <algorithm>
- #include <queue>
- #include <vector>
- using namespace std;
- vector<int> g[100005];
- int visited[100005];
- int start[100005];
- int finish[100005];
- int time = 0;
- void dfs(int s) {
- time += 1;
- start[s] = time;
- visited[s] = 1;
- for (int i=0; i < g[s].size(); i++) {
- if (visited[g[s][i]] == 0) {
- dfs(g[s][i]);
- }
- }
- finish[s] = time;
- }
- int main() {
- int root = -1;
- int v;
- cin >> v;
- for (int i=1; i <= v; i++) {
- int conn;
- cin >> conn;
- if (conn != 0) {
- g[conn].pb(i);
- }
- else {
- root = i;
- }
- }
- int q;
- cin >> q;
- dfs(root);
- for (int i=0; i < q; i++) {
- int x, y;
- cin >> x >> y;
- if (start[x]<start[y] && finish[x]>=finish[y]) {
- cout << 1 << endl;
- }
- else {cout << 0 << endl;}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment