This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define pb push_back
#define S second
#define F first
const int N = 1e5 + 10;
const int inf = 2e9;
const int lg = 17;
using namespace std;
vector<pair<int,int>>g[N];
int up[N][lg],in[N],out[N],timer = 0,dist[N];
void dfs(int x,int par) {
    in[x] = ++timer;
    if(par != -1) up[x][0] = par;
    if(par != -1) for(int j = 1; j < lg; j++) up[x][j] = up[up[x][j - 1]][j - 1];
    for(auto X : g[x]) {
        if(X.F == par) continue;
        dist[X.F] = dist[x] + X.S;
        dfs(X.F,x);
    }
    out[x] = timer;
}
bool intree(int u,int v) {
    return (in[u] <= in[v] && out[u] >= out[v]);
}
int lca(int u,int v) {
    if(intree(u,v)) return u;
    if(intree(v,u)) return v;
    for(int j = lg - 1; j >= 0; j--) {
        if(up[u][j] > 0 && !intree(up[u][j],v)) u = up[u][j];
    }
    return up[u][0];
}
bool cmp(int A,int B) {
    return (in[A] <= in[B]);
}
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n;
    for(int i = 1; i < n; i++) {
        int u,v,w;
        cin >> u >> v >> w;
        g[u].pb({v,w});
        g[v].pb({u,w});
    }
    dfs(0,-1);
    int q;
    cin >> q;
    while(q--) {
        vector<int>vec;
        for(int i = 0; i < 5; i++) {
            int X;
            cin >> X;
            vec.pb(X);
        }
        sort(vec.begin(),vec.end(),cmp);
        vec.pb(vec[0]);
        int res = 0;
        for(int i = 0; i < 5; i++) {
            res += dist[vec[i]];
            res -= dist[lca(vec[i],vec[i + 1])];
        }
        cout << res << "\n";
    }
    return 0;
}
| # | 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... |