#include "roads.h"
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define vll vector<ll>
#define pll pair<ll, ll>
typedef long long ll;
const ll mxN=1e5+5;
vector<pll> adj[mxN];
ll n;
ll dp[mxN][2];
ll k;
void dfs(ll cur, ll par){
ll dumb=0;
vll tep;
for(auto &[chd, w]:adj[cur]){
if(chd==par) continue;
dfs(chd, cur);
dumb+=dp[chd][1];
if(dp[chd][0]-dp[chd][1]+w>0) tep.pb(dp[chd][0]-dp[chd][1]+w);
}
sort(tep.begin(), tep.end(), greater<ll>());
dp[cur][0]=dumb;
for(ll i=0;i<k-1 && i<(ll) tep.size();i++){
dp[cur][0]+=tep[i];
}
dp[cur][1]=dumb;
for(ll i=0;i<k && i<(ll) tep.size();i++){
dp[cur][1]+=tep[i];
}
}
vector<long long> minimum_closure_costs(int N, vector<int> U,
vector<int> V,
vector<int> W) {
n=N;
ll sum=0;
for(ll i=0;i<n-1;i++){
adj[U[i]].pb({V[i], W[i]});
adj[V[i]].pb({U[i], W[i]});
sum+=W[i];
}
vll ans(n);
for(ll i=0;i<n;i++){
k=i;
dfs(0, -1);
ans[i]=sum-dp[0][1];
}
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... |