#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
#define ll long long
#define fff(i, a, b) for(int i = a; i < b; i++)
#define fffm(i, a, b) for(int i = a; i > b; i--)
#define N 50004
#define LGN 18
ll anc[N][LGN], sm[N], dep[N];
int n, q;
vector<pair<int, ll>> adj[N];
void dfs1(int nod, int frm, int cum_sm, int dpth){
    sm[nod] = cum_sm;
    anc[nod][0] = frm;
    dep[nod] = dpth;
    for(auto [a, b]: adj[nod]){
        if (a != frm){
            dfs1(a, nod, cum_sm+b, dpth+1);
        }
    }
}
void lca_init(){
    fff(j, 1, LGN){
        fff(i, 0, n){
            anc[i][j] = anc[anc[i][j-1]][j-1];
        }
    }
}
int kthanc(int a, int k){
    fff(i, 0, LGN){
        if (k & (1<<i)){
            a = anc[a][i];
        }
    }
    return a;
}
int lca(int a, int b){
    if (dep[a] > dep[b]) swap(a, b);
    b = kthanc(b, dep[b]-dep[a]);
    if (a == b) return a;
    fffm(i, LGN-1, -1){
        if (anc[a][i] != anc[b][i]){
            a = anc[a][i];
            b = anc[b][i];
        }
    } return anc[a][0];
}
int main(){
    cin >> n;
    fff(i, 0, n-1){
        ll u, v, w; cin >> u >> v >> w;
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }
    dfs1(0, 0, 0, 0);
    lca_init();
    // fff(i, 0, n) cout << anc[i][0] << endl;
    // cout << lca(4, 3) << endl;
    cin >> q;
    while(q--){
        int a, b, c, d, e; cin >> a >> b >> c >> d >> e; 
        ll sm1 = sm[a] + sm[b] + sm[c] + sm[d] + sm[e];
        ll sm2 = sm[lca(a, b)] + sm[lca(a, c)] + sm[lca(a, d)] + sm[lca(a, e)] + sm[lca(b, c)] + sm[lca(b, d)] + sm[lca(b, e)] +  sm[lca(c, d)] + sm[lca(c, e)] + sm[lca(d, e)];
        // cout << lca(a, b) << lca(a, c) << lca(a, d) << lca(a, e) << lca(b, c) << lca(b, d) << lca(b, e) << lca(c, d) << lca(c, e) << lca(d, e) << endl;
        ll sm3 = sm[lca(lca(a, b), c)] + sm[lca(lca(a, b), d)] + sm[lca(lca(a, b), e)] + sm[lca(lca(a, c), d)] + sm[lca(lca(a, c), e)]+ sm[lca(lca(a, d), e)] + sm[lca(lca(b, c), d)] +  sm[lca(lca(b, c), e)] +  sm[lca(lca(b, d), e)] + sm[lca(lca(c, d), e)];
        // cout << sm[lca(lca(b, c), d)] + sm[lca(lca(b, c), e)] +  sm[lca(lca(b, d), e)] + sm[lca(lca(c, d), e)] << endl;
        ll sm4 = sm[lca(lca(a, b), lca(c, d))] + sm[lca(lca(a, b), lca(c, e))] + sm[lca(lca(a, b), lca(e, d))] + sm[lca(lca(a, e), lca(c, d))] + sm[lca(lca(e, b), lca(c, d))];
        ll sm5 = sm[lca(lca(lca(a, b), lca(c, d)), e)];
        // cout << sm1 << " " << sm2 << " " << sm3 << " " << sm4 << " " << sm5 << endl;
        cout << sm1 - sm2 + sm3 - sm4 + sm5 << endl;
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |