Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define pb push_back
- #define mp make_pair
- #define X first
- #define Y second
- #define ll long long
- #define pii pair<int, int>
- using namespace std;
- struct node{
- int p, c, num;
- vector<int> g;
- };
- node nodes[50005];
- int n, up[50005][20], x, y, tin[50005], ts, minr[50005][20], l, tout[50005], m;
- void dfs(int vi, int p = 1){
- node v = nodes[vi];
- tin[vi] = ++ts;
- up[vi][0] = p;
- if(vi == 1){
- for(int i = 0; i <= l; ++i){
- minr[1][i] = 1e9;
- }
- }
- else{
- minr[vi][0] = v.c;
- }
- for(int i = 1; i <= l; ++i){
- up[vi][i] = up[up[vi][i - 1]][i - 1];
- minr[vi][i] = min(minr[vi][i - 1], minr[up[vi][i - 1]][i - 1]);
- }
- for(int i = 0; i < (int)v.g.size(); ++i){
- int to = nodes[v.g[i]].num;
- if(to != p){
- dfs(to, vi);
- }
- }
- tout[vi] = ++ts;
- }
- bool upper(int a, int b){
- return tin[b] >= tin[a] && tout[b] <= tout[a];
- }
- int lca(int a, int b){
- if(upper(a, b)) return a;
- if(upper(b, a)) return b;
- for(int i = l; i >= 0; --i){
- if(!upper(up[a][i], b)){
- a = up[a][i];
- }
- }
- return up[a][0];
- }
- int getmin(int p, int s){
- if(p == s){
- return 1e9;
- }
- int minv = 1e9;
- for(int i = l; i >= 0; --i){
- if(!upper(up[s][i], p)){
- minv = min(minv, minr[s][i]);
- s = up[s][i];
- }
- }
- return min(minv, minr[s][0]);
- }
- int ask(int a, int b){
- int m;
- m = lca(a, b);
- return min(getmin(m, a), getmin(m, b));
- }
- int main(){
- #ifdef DEBUG
- freopen("input.txt", "r", stdin);
- #endif // DEBUG
- freopen("minonpath.in", "r", stdin);
- freopen("minonpath.out", "w", stdout);
- ts = 0;
- cin >> n;
- nodes[1].p = -1;
- nodes[1].c = 1e9;
- nodes[1].num = 1;
- for(int i = 2; i <= n; ++i){
- cin >> x >> y;
- nodes[i].p = x;
- nodes[i].c = y;
- nodes[i].num = i;
- nodes[x].g.pb(i);
- }
- l = 1;
- while((1 << l) <= n) ++l;
- dfs(1);
- cin >> m;
- for(int i = 1; i <= m; ++i){
- cin >> x >> y;
- cout << ask(x, y) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement