Submission #764976

#TimeUsernameProblemLanguageResultExecution timeMemory
764976vjudge1Roadside Advertisements (NOI17_roadsideadverts)C++17
100 / 100
45 ms11764 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; vector<pair<int,int>>vec; for(int t = 1; t <= q; t++){ vec.clear(); for(int i = 0; i < 5; i++){ int x; cin >> x; x++; vec.emplace_back(tin[x], x); } sort(vec.begin(), vec.end()); ll ans = 0; for (int i = 0 ; i < 5 ; ++ i) { int x = vec[i].second; int y = vec[i == 4 ? 0 : i + 1].second; int z = get(x, y); ans += sum[x] + sum[y] - 2 * sum[z]; } cout << ans / 2 << 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...