Submission #1075864

#TimeUsernameProblemLanguageResultExecution timeMemory
1075864GrindMachinePetrol stations (CEOI24_stations)C++17
18 / 100
62 ms11968 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL) #define pb push_back #define endl '\n' #define conts continue #define ff first #define ss second #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define sz(a) (int)a.size() #define rep(i,n) for(int i = 0; i < n; ++i) #define rep1(i,n) for(int i = 1; i <= n; ++i) #define rev(i,s,e) for(int i = s; i >= e; --i) #define trav(i,a) for(auto &i : a) template<typename T> void amin(T &x, T y){ x = min(x,y); } template<typename T> void amax(T &x, T y){ x = max(x,y); } template<typename A,typename B> string to_string(pair<A,B> p); string to_string(const string &s){ return "'"+s+"'"; } string to_string(const char *s){ return to_string((string)s); } string to_string(bool b){ return b?"true":"false"; } template<typename A> string to_string(A v){ string res = "{"; trav(x,v){ res += to_string(x)+","; } if(res.back() == ',') res.pop_back(); res += "}"; return res; } template<typename A,typename B> string to_string(pair<A,B> p){ return "("+to_string(p.ff)+","+to_string(p.ss)+")"; } #define debug(x) cout << #x << " = "; cout << to_string(x) << endl const int MOD = 1e9 + 7; const int N = 1e5 + 5; const int inf1 = 1e9 + 5; const ll inf2 = (ll)1e18 + 5; vector<pll> adj[N]; void solve(int test_case){ ll n,k; cin >> n >> k; rep(i,n-1){ ll u,v,w; cin >> u >> v >> w; adj[u].pb({v,w}), adj[v].pb({u,w}); } ll r = -1; rep(i,n){ if(sz(adj[i]) == 1){ r = i; break; } } assert(r != -1); vector<pll> path; auto dfs1 = [&](ll u, ll p, auto &&dfs1) -> void{ path.pb({u,0}); for(auto [v,w] : adj[u]){ if(v == p) conts; path.back().ss = w; dfs1(v,u,dfs1); } }; dfs1(r,-1,dfs1); vector<ll> ans(n+5); auto go = [&](){ vector<ll> nxt(n,-1); ll sum = 0; ll ptr = 0; rep(i,n){ while(ptr < n and sum <= k){ sum += path[ptr++].ss; } if(sum > k){ nxt[i] = ptr-1; } sum -= path[i].ss; } vector<ll> dp(n); rep(i,n){ dp[i]++; if(nxt[i] != -1){ dp[nxt[i]] += dp[i]; } } rep(i,n){ ans[path[i].ff] += dp[i]*(n-i-1); } }; go(); reverse(all(path)); rep(i,n-1) path[i].ss = path[i+1].ss; path.back().ss = 0; go(); rep(i,n) ans[i] -= n-1; rep(i,n) cout << ans[i] << endl; } int main(){ int t = 1; // cin >> t; rep1(i,t){ solve(i); } 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...