Submission #1226527

#TimeUsernameProblemLanguageResultExecution timeMemory
1226527AMnuPaths (RMI21_paths)C++20
100 / 100
233 ms14328 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; typedef long long ll; typedef pair<int,int> pii; const int MAXN = 1e5+5; int N, K, x, y, z, cnt; ll ans[MAXN], sum, dp[MAXN][2]; vector <pii> adj[MAXN]; multiset <ll> inti, sisa; void ins(ll x) { if (!x) return; inti.insert(x); sum += x; cnt++; if (cnt > K) { x = *inti.begin(); sum -= x; sisa.insert(x); inti.erase(inti.find(x)); cnt--; } } void del(ll x) { if (!x) return; if (sisa.find(x) != sisa.end()) { sisa.erase(sisa.find(x)); return; } if (inti.find(x) == inti.end()) { while (1) {} } cnt--; inti.erase(inti.find(x)); sum -= x; if (!sisa.empty()) { x = *sisa.rbegin(); sum += x; inti.insert(x); sisa.erase(sisa.find(x)); cnt++; } } void root(int cur,int par) { ans[cur] = sum; for (pii next : adj[cur]) { if (next.fi == par) continue; ll a = dp[next.fi][0], b; if (dp[next.fi][0] + next.se == dp[cur][0]) { b = dp[cur][1]; } else { b = dp[cur][0]; } dp[next.fi][1] = max(dp[next.fi][1],b+next.se); if (dp[next.fi][1] > dp[next.fi][0]) swap(dp[next.fi][0],dp[next.fi][1]); del(a + next.se); ins(a); del(b); ins(b + next.se); root(next.fi,cur); ins(a + next.se); del(a); ins(b); del(b + next.se); } } void dfs(int cur,int par) { if (adj[cur].size() == 1 && cur != 1) { ins(0); } for (pii next : adj[cur]) { if (next.fi == par) continue; dfs(next.fi,cur); del(dp[next.fi][0]); ins(dp[next.fi][0]+next.se); dp[cur][1] = max(dp[cur][1],dp[next.fi][0]+next.se); if (dp[cur][1] > dp[cur][0]) swap(dp[cur][0],dp[cur][1]); } } int main () { cin >> N >> K; for (int i=1;i<N;i++) { cin >> x >> y >> z; adj[x].push_back({y,z}); adj[y].push_back({x,z}); } dfs(1,1); root(1,1); for (int i=1;i<=N;i++) { cout << ans[i] << "\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...