#include <bits/stdc++.h>
const int NN = 4e4 + 4;
using namespace std;
vector<int> G[NN];
int N, TI[NN], TO[NN], timer = 0;
void dfs(int u, int fa = -1) {
TI[u] = ++timer;
for (int v : G[u])
if (v != fa)
dfs(v, u);
TO[u] = ++timer;
}
bool isAncestor(int u, int v) {
return TI[u] < TI[v] && TO[v] < TO[u];
}
int solve(int u, int v) {
if (isAncestor(u, v))
return 1;
if (isAncestor(v, u))
return 2;
return 0;
}
int main() {
ios::sync_with_stdio(false), cin.tie(0);
int N, M, root;
cin >> N;
for (int i = 1, u, v; i <= N; i++) {
cin >> u >> v;
if (v == -1)
root = u;
else
G[u].push_back(v), G[v].push_back(u);
}
dfs(root);
cin >> M;
for (int i = 1, u, v; i <= M; i++)
cin >> u >> v, printf("%d\n", solve(u, v));
return 0;
}
一本通1557:祖孙询问
最新推荐文章于 2025-05-16 14:00:49 发布