Submission #1170809

#TimeUsernameProblemLanguageResultExecution timeMemory
1170809WH8Petrol stations (CEOI24_stations)C++20
0 / 100
92 ms14780 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
 
using namespace std;
using namespace __gnu_pbds;
#define g0(x) get<0>(x)
#define g1(x) get<1>(x)
#define g2(x) get<2>(x)
 
#define pb push_back
#define int long long 
#define f first
#define s second
#define pll pair<long long, long long>
vector<vector<pll>> al(70005);
int oti[70005];
vector<pair<int,int>> ord;

void dfs(int x,int p){
	for(auto [it,di]:al[x]){
		if(it==p)continue;
		ord.pb({it, di});
		dfs(it, x);
	}
}
signed main(){
	int n,k;cin>>n>>k;
	for(int i=0;i<n-1;i++){
		int a,b,l;cin>>a>>b>>l;
		al[a].pb({b,l});
		al[b].pb({a,l});
	}
	int cur=0;
	for(int i=0;i<n-1;i++){
		if(al[i].size()==1)cur=i;
	}
	ord.pb({cur, 0});
	dfs(cur,-1);
	int ans[n]; fill(ans, ans+n,0);
	
	queue<pair<int,int>> q;
	q.push({k,1});
	int os=0;
	for(int i=0;i<n;i++){
		oti[i]=ord[i].f;
	}
	//~ for(int i=0;i<n;i++){
		//~ cout<<ord[i].f<<" "<<ord[i].s<<endl;
		//~ cout<<oti[i]<<endl;
	//~ }
	
	for(int i=1;i<=n-2;i++){
		os-=ord[i].s;
		int sm=0;
		while(!q.empty() and q.front().f+os<ord[i+1].s){
			sm+=q.front().s;
			q.pop();
		}
		ans[i]+=(sm*(n-i-1));
		q.push({k-os,sm+1});
		//~ printf("i is %lld, os is %lld, ord[i+1].s is %lld, sm is %lld\n",i,os,ord[i+1].s, sm);

	}
	
	os=0;
	while(!q.empty())q.pop();
	q.push({k,1});
	for(int i=n-2;i>=1;i--){
		os-=ord[i+1].s;
		int sm=0;
		while(!q.empty() and q.front().f+os<ord[i].s){
			sm+=q.front().s;
			q.pop();
		}
		ans[i]+=(sm*(i));
		q.push({k-os,sm+1});
	}
	for(int i=0;i<n;i++){
		cout<<ans[oti[i]]<<endl;
	}
	
}
#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...