Submission #716521

#TimeUsernameProblemLanguageResultExecution timeMemory
716521StickfishPaths (RMI21_paths)C++17
36 / 100
684 ms11092 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; using ll = long long; const int MAXN = 1e4 + 123; vector<pair<int, int>> edg[MAXN]; ll cost[MAXN * 2]; pair<int, int> edges[MAXN * 2]; vector<ll> dp[MAXN * 2]; void get_dp(int e, int k) { if (dp[e].size()) return; auto [rt, v] = edges[e]; for (auto [u, ne] : edg[v]) { if (u == rt) continue; get_dp(ne, k); vector<ll> ndp(dp[e].size() + dp[ne].size()); merge(dp[e].rbegin(), dp[e].rend(), dp[ne].rbegin(), dp[ne].rend(), ndp.rbegin()); ndp.resize(min(int(ndp.size()), k)); dp[e] = ndp; } if (dp[e].empty()) { dp[e] = {cost[e]}; } else { dp[e][0] += cost[e]; } } signed main() { int n, k; cin >> n >> k; for (int i = 0; i + 1 < n; ++i) { int u, v, c; cin >> u >> v >> c; --u, --v; edg[u].push_back({v, i * 2}); edg[v].push_back({u, i * 2 + 1}); edges[i * 2] = {u, v}; edges[i * 2 + 1] = {v, u}; cost[i * 2] = cost[i * 2 + 1] = c; } for (int e = 0; e < n * 2 - 1; ++e) get_dp(e, k); for (int v = 0; v < n; ++v) { vector<ll> ans; for (auto [u, e] : edg[v]) { vector<ll> ndp(ans.size() + dp[e].size()); merge(dp[e].rbegin(), dp[e].rend(), ans.rbegin(), ans.rend(), ndp.rbegin()); ndp.resize(min(int(ndp.size()), k)); ans = ndp; } ll anssm = 0; for (auto x : ans) anssm += x; cout << anssm << '\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...