#include "roads.h"
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
vector<vector<pair<int, int>>> adj;
vector<long long> ans;
vector<long long> dp0, dp1;
int k;
void dfs(int s, int p, int w) {
    for (auto u: adj[s]) {
        if (u.first != p) dfs(u.first, s, u.second);
    }
    // printf("%d here\n", s);
    vector<long long> srt;
    for (auto u: adj[s]) {
        if (u.first == p) continue;
        srt.push_back(dp1[u.first] - dp0[u.first]);
        dp0[s] += dp0[u.first];
        dp1[s] += dp0[u.first];
    }
    
    // printf("%d here\n", s);
    sort(srt.begin(), srt.end());
    int sz = srt.size();
    int lim = min(k, sz);
    for (int i = 0; i < lim; i++) {
        if (srt[i] < 0) {
            dp0[s] += srt[i];
        }
    }
    // printf("%d here\n", s);
    dp0[s] += w;
    lim = min(k-1, sz);
    for (int i = 0; i < lim; i++) {
        if (srt[i] < 0) {
            dp1[s] += srt[i];
        }
    }
}
vector<long long> minimum_closure_costs(int n, vector<int> u, vector<int> v, vector<int> w) {
    adj.resize(n);
    ans.resize(n);
    dp0.resize(n);
    dp1.resize(n);
    for (int i = 0; i < n-1; i++) {
        adj[u[i]].push_back({v[i], w[i]});
        adj[v[i]].push_back({u[i], w[i]});
    }
    // printf("here\n");
    // for (int i = 0; i < n; i++) {
    //     printf("%d: ", i);
    //     for (auto u: adj[i]) printf("{%d, %d}\t", u.first, u.second);
    //     printf("\n");
    // }
    for (k = 0; k < n; k++) { // careful with k = 0 and generally with init
        // printf("%d\n", k);
        for (int i = 0; i < n; i++) {
            dp0[i] = 0;
            dp1[i] = 0;
        }
        dfs(0, 0, 0);
        ans[k] = min(dp0[0], dp1[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... |