Submission #1346542

#TimeUsernameProblemLanguageResultExecution timeMemory
1346542MrAndriaPetrol stations (CEOI24_stations)C++20
18 / 100
3593 ms14244 KiB
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
#define int long long
int n,k,ans[1000005],pref[1000005], dist[1000005];
vector <int> v;
vector <pair <int,int> > adj[1000005];

void dfs(int x,int p,int curr){
    v.pb(x);
    dist[x]=curr;
    for(auto u:adj[x]){
        if(u.ff!=p){
            dfs(u.ff,x,curr+u.ss);
        }
    }
}
void solve(int root){
    v.clear();
    dfs(root,root,0);
    for(int i=1;i<v.size()-1;i++){
        int l=0;
        int r=i-1;
        int lef=-1,righ=-1;
        while(l<=r){
            int mid=(l+r)/2;
            if(dist[v[i+1]]-k>dist[v[mid]]){
                righ=mid;
                l=mid+1;
            }else{
                r=mid-1;
            }
        }
        l=0;
        r=i-1;
        while(l<=r){
            int mid=(l+r)/2;
            if(dist[v[i]]-k>dist[v[mid]]){
                lef=mid;
                l=mid+1;
            }else{
                r=mid-1;
            }
        
        }
        // cout<<lef<<" "<<righ<<endl;
        if(righ==-1){
            
            pref[i]=pref[i-1];
        }else{
            if(lef==-1){
                ans[v[i]]+=(n-i-1)*(pref[righ]+righ+1);
                pref[i]=pref[i-1]+(pref[righ]+righ+1);
            }else{
                ans[v[i]]+=(pref[righ]-pref[lef]+righ-lef)*(n-i-1);
                pref[i]=pref[i-1]+(pref[righ]-pref[lef]+righ-lef);
            }
        }
    }
}

signed main(){
    cin>>n>>k;
    for(int i=1;i<=n-1;i++){
        int u,v,c;
        cin>>u>>v>>c;
        adj[u].pb(make_pair(v,c));
        adj[v].pb(make_pair(u,c));
        
    }
    for(int i=0;i<=n-1;i++){
        if(adj[i].size()==1){
            solve(i);
        }
    }
    for(int i=0;i<=n-1;i++){
        cout<<ans[i]<<"\n";
    }
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...