Submission #1162427

#TimeUsernameProblemLanguageResultExecution timeMemory
1162427tw20000807Road Closures (APIO21_roads)C++20
0 / 100
2096 ms25736 KiB
#include "roads.h" #include<bits/stdc++.h> using namespace std; vector<long long> minimum_closure_costs(int n, vector<int> u, vector<int> v, vector<int> w){ #define all(v) v.begin(), v.end() #define int long long #define pii pair<int, int> #define X first #define Y second #define SZ(s) ((int)s.size()) vector< vector< pii > > g(n); vector< int > ans(n); for(int i = 0; i < n - 1; ++i){ g[u[i]].push_back({v[i], w[i]}); g[v[i]].push_back({u[i], w[i]}); ans[0] += w[i]; } for(int k = 1; k < n; ++k){ vector< array<int, 2> > dp(n); auto dfs = [&](auto dfs, int cur, int par, int d = 0) -> void { int base = 0; vector< int > t; for(auto &[k, w] : g[cur]) if(k != par) { dfs(dfs, k, cur, w); base += dp[k][0]; t.push_back(dp[k][1] - dp[k][0]); } sort(all(t)); int i; for(i = 0; i < SZ(g[cur]) - 1 - k; ++i){ base += t[i]; } dp[cur][1] = base + d; dp[cur][0] = base + (i < SZ(g[cur]) - k) ? t[i] : 0; }; dfs(dfs, 0, 0); ans[k] = dp[0][0]; } return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...