This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize("O3")
//#pragma GCC optimize("Ofast")
#define int long long
#define forn(i,n) for (int i=0; i<n; ++i)
#define pi pair<int,int>
#define pb(x) push_back(x)
#define f first
#define s second
vector<vector<pi>> adj(1e5+1);
int n,k;
vector<int> d;
vector<int> par;
int R;
unordered_map<int,unordered_map<int,int>> m;
void dfs(int u, int p) {
for (auto x:adj[u]) {
int v=x.f;
if (v==p) continue;
par[v]=u;
d[v]=d[u]+(1-m[u][v])*x.s;
dfs(v,u);
}
}
void climb(int u) {
if (u==R) return;
m[par[u]][u]=1;
climb(par[u]);
}
void root(int u) {
R=u;
d.assign(n+1,0);
par.assign(n+1,0);
m.clear();
int ans=0;
if (n>200) {
dfs(u,0);
return;
}
forn(i,k) {
dfs(u,0);
int mx=R;
forn(j,n) {
if (d[j+1]>d[mx]) mx=j+1;
}
ans+=d[mx];
climb(mx);
}
cout<<ans<<'\n';
}
void solve() {
cin>>n>>k;
forn(i,n-1) {
int u,v,x; cin>>u>>v>>x;
adj[u].push_back({v,x});
adj[v].push_back({u,x});
}
forn(i,n) root(i+1);
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
solve();
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... |