Submission #765326

#TimeUsernameProblemLanguageResultExecution timeMemory
765326vjudge1Roadside Advertisements (NOI17_roadsideadverts)C++17
100 / 100
45 ms15392 KiB
#include <bits/stdc++.h> #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") #define ent '\n' #define f first #define s second using namespace std; typedef long long ll; typedef pair < int, int> pii; typedef pair < ll, ll > pll; const int maxn = 2e5 + 100; const int mod = 1e9 + 7; const int INF = 1e9; const int LOG = 20; const int K = 400; const int P = 31; int n, m; vector < pii > g[maxn]; int pref[maxn], p[LOG][maxn], tin[maxn], tout[maxn], timer, depth[maxn], a[6]; ll ans = 0; void dfs(int v){ for(int i = 1;i < LOG;i++){ p[i][v] = p[i - 1][p[i - 1][v]]; } tin[v] = ++timer; for(auto to: g[v]){ if(to.f == p[0][v])continue; p[0][to.f] = v; depth[to.f] = depth[v] + 1; pref[to.f] = pref[v] + to.s; dfs(to.f); } tout[v] = ++timer; } bool upper(int a, int b){return tin[a] <= tin[b] && tout[a] >= tout[b];} int lca(int a, int b){ if(upper(a, b))return a; if(upper(b, a))return b; for(int i = LOG - 1;i >= 0;i--){ if(!upper(p[i][a], b) && p[i][a] != 0)a = p[i][a]; } return p[0][a]; } void solve(){ cin >> n; for(int i = 1;i < n;i++){ int u, v, w; cin >> u >> v >> w; u++, v++; g[u].push_back({v, w}); g[v].push_back({u, w}); } dfs(1); cin >> m; for(int i = 1;i <= m;i++){ cin >> a[1]; int LCA = a[1] + 1, ans = 0; for(int j = 2;j <= 5;j++){ cin >> a[j]; LCA = lca(LCA, a[j] + 1); } for(int j = 1;j <= 5;j++){ int q = LCA; for(int k = 1;k < j;k++){ int w = lca(a[j] + 1, a[k] + 1); if(depth[q] < depth[w]){ q = w; } } ans += pref[a[j] + 1] - pref[q]; } cout << ans << ent; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int T = 1; // cin >> T; for(int i = 1;i <= T;i++){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...