#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#define int long long
#define F first
#define S second
#define all(v) v.begin(),v.end()
#define pb push_back
#define eb emplace_back
#define endl '\n'
typedef vector<int> vi;
typedef pair<long long,int> ii;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef tuple<int,int,int> iii;
int n,k,leafcnt;
vector<vii> adj;
vi dist;
int dfs(int node,int p){
int mxdist = 0,mxleaf = node;
for (auto tp : adj[node]){
int to,w; tie(to,w) = tp;
if (to == p) continue;
int leaf = dfs(to,node);
dist[leaf] += w;
if (adj[to].size() == 1) leafcnt++;
if (dist[leaf] > mxdist){
mxleaf = leaf;
mxdist = dist[leaf];
}
}
return mxleaf;
}
int32_t main(){
ios_base::sync_with_stdio(NULL);cin.tie(NULL); cout.tie(NULL);
cin >> n >> k;
adj.assign(n + 10,vii());
for (int i = 0; i < n-1; i++){
int u,v,w; cin >> u >> v >> w; u--; v--;
adj[u].eb(v,w);
adj[v].eb(u,w);
}
for (int root = 0; root < n; root++){
leafcnt = 0;
dist.assign(n,0);
dfs(root,-1);
sort(all(dist),greater<int>());
int ans = 0;
for (int i = 0; i < min(k,leafcnt); i++) ans += dist[i];
cout << ans << endl;
}
return 0;
}
| # | 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... |