#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |