Submission #764783

#TimeUsernameProblemLanguageResultExecution timeMemory
764783vjudge1Roadside Advertisements (NOI17_roadsideadverts)C++17
100 / 100
49 ms12796 KiB
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <bitset>
#include <cmath>
#include <queue>
#include <map>
#include <set>

// Akhmet Issa

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define ent "\n"

const int maxn = 5e4 + 100;
const ll INF = (ll)2e18;
const int inf = (ll)2e9;
const int maxl = 20;
const int MOD = 1e9 + 7;

int n, t, q;
vector<pii> g[maxn];
int p[maxl][maxn];
int sum[maxn];
int dep[maxn];
int tin[maxn];
int tout[maxn];

void dfs(int v){
    tin[v] = ++t;
    for(int k = 1; k < maxl; k++){
        p[k][v] = p[k-1][p[k-1][v]];
    }
    for(auto [to, w]: g[v]){
        if(to == p[0][v]) continue;
        p[0][to] = v;
        sum[to] = sum[v] + w;
        dep[to] = dep[v] + 1;
        dfs(to);
    }
    tout[v] = t;
}

bool ok(int a, int b){
    return tin[a] <= tin[b] && tout[b] <= tout[a];
}

int get(int a, int b){
    if(ok(a, b)) return a;
    if(ok(b, a)) return b;
    for(int k = maxl - 1; k >= 0; k--){
        if(p[k][a] && !ok(p[k][a], b)) a = p[k][a];
    }
    return p[0][a];
}

void test(){
    cin >> n;
    for(int i = 1; i < n; i++){
        int a, b, c;
        cin >> a >> b >> c;
        a++; b++;
        g[a].push_back({b, c});
        g[b].push_back({a, c});
    }
    dfs(1);
    cin >> q;
    for(int t = 1; t <= q; t++){
        int a[5];
        int r = -1;
        for(int i = 0; i < 5; i++){
            cin >> a[i]; a[i]++;
            if(r == -1) r = a[i];
            else r = get(r, a[i]);
        }
        ll ans = 0;
        for(int i = 0; i < 5; i++){
            int r1 = r;
            for(int j = 0; j < i; j++){
                int r2 = get(a[i], a[j]);
                if(dep[r1] < dep[r2]) r1 = r2;
            }
            ans += sum[a[i]] - sum[r1];
        }
        cout << ans << ent;
    }
}

int main(){
    // freopen("cows.in", "r", stdin);
    // freopen("cows.out", "w", stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    while(t--) test();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...