#include<bits/stdc++.h>
#define MAXN 70007
using namespace std;
struct edge{
int to,cost;
};
int n,K,a,b,c;
long long ans[MAXN],sz[MAXN];
vector<edge> v[MAXN];
void calc(int x,int p){
sz[x]=1;
for(auto e:v[x]){
if(e.to==p)continue;
calc(e.to,x);
sz[x]+=sz[e.to];
}
}
void dfs(int x,int p,int up,long long d){
if(d<0){
ans[p]+=sz[x];
d=K-up;
}
for(auto e:v[x]){
if(e.to==p)continue;
dfs(e.to,x,e.cost,d-e.cost);
}
}
void solve_slow(){
for(int i=1;i<=n;i++){
calc(i,0);
dfs(i,0,0,K);
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<"\n";
}
}
int ed[MAXN],m,to[MAXN];
vector<int> tree[MAXN];
int ver[MAXN];
void dfs2(int x,int p){
for(auto e:v[x]){
if(e.to==p)continue;
m++; ed[m]=e.cost;
ver[m]=x; ver[m+1]=e.to;
dfs2(e.to,x);
}
}
void dfs3(int x){
sz[x]=1;
for(int i:tree[x]){
dfs3(i);
sz[x]+=sz[i];
}
}
void solve_line(){
for(int i=1;i<=n;i++){
if(v[i].size()==1){
dfs2(i,0); break;
}
}
int pt=1,sum=ed[1];
for(int i=1;i<=m;i++){
while(pt<m and sum+ed[pt+1]<=K){
pt++; sum+=ed[pt];
}
to[i]=pt+1;
sum-=ed[i];
}
for(int i=1;i<=m;i++){
tree[to[i]].push_back(i);
}
dfs3(n);
for(int i=1;i<=n;i++){
ans[ver[i]]+=(long long) (sz[i]-1) * (n-i);
tree[i].clear();
}
reverse(ed+1,ed+m+1);
reverse(ver+1,ver+n+1);
pt=1; sum=ed[1];
for(int i=1;i<=m;i++){
while(pt<m and sum+ed[pt+1]<=K){
pt++; sum+=ed[pt];
}
to[i]=pt+1;
sum-=ed[i];
}
for(int i=1;i<=m;i++){
tree[to[i]].push_back(i);
}
dfs3(n);
for(int i=1;i<=n;i++){
ans[ver[i]]+=(long long) (sz[i]-1) * (n-i);
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<"\n";
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>K;
for(int i=1;i<=n-1;i++){
cin>>a>>b>>c;
a++; b++;
v[a].push_back({b,c});
v[b].push_back({a,c});
}
if(n<=1000){
solve_slow();
}else{
solve_line();
}
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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |