Submission #1232359

#TimeUsernameProblemLanguageResultExecution timeMemory
1232359alexander707070Petrol stations (CEOI24_stations)C++20
36 / 100
44 ms14916 KiB
#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 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...