Submission #1132969

#TimeUsernameProblemLanguageResultExecution timeMemory
1132969vladiliusPaths (RMI21_paths)C++20
0 / 100
1094 ms10052 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second struct ST{ vector<ll> a; int n; ST(int ns){ n = ns; a.resize(n + 1); } void upd(int p, ll x){ a[p] = x; } void upd(int l, int r, int x){ for (int i = l; i <= r; i++){ a[i] += x; } } pii get(){ pii mx = {0, 0}; for (int i = 1; i <= n; i++){ mx = max(mx, {a[i], i}); } return mx; } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k; cin>>n>>k; vector<pii> g[n + 1]; for (int i = 1; i < n; i++){ int x, y, w; cin>>x>>y>>w; g[x].pb({y, w}); g[y].pb({x, w}); } vector<int> tin(n + 1), tout(n + 1), W(n + 1), P(n + 1); vector<ll> d(n + 1); int timer = 0; function<void(int, int)> fill = [&](int v, int pr){ P[v] = pr; tin[v] = ++timer; for (auto [i, w]: g[v]){ if (i == pr) continue; W[i] = w; d[i] = d[v] + w; fill(i, v); } tout[v] = timer; }; ST T(n); vector<int> inv(n + 1); vector<bool> used(n + 1); for (int i = 1; i <= n; i++){ timer = d[i] = 0; fill(i, 0); for (int j = 1; j <= n; j++){ T.upd(tin[j], d[j]); inv[tin[j]] = j; used[j] = 0; } used[i] = 1; int tt = k; ll out = 0; while (tt--){ auto [vv, p] = T.get(); if (!vv) break; out += vv; p = inv[p]; while (!used[p]){ used[p] = 1; T.upd(tin[p], tout[p], -W[p]); p = P[p]; } } cout<<out<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...