Submission #1364981

#TimeUsernameProblemLanguageResultExecution timeMemory
1364981julia_08Petrol stations (CEOI24_stations)C++20
18 / 100
34 ms16424 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int MAXN = 7e4 + 10;

ll ans[MAXN];

ll cost[MAXN];

ll sum[MAXN];

vector<pair<int, int>> adj[MAXN];

ll k;

void dfs(int v, int p, vector<pair<int, ll>> &line){

  for(auto [u, w] : adj[v]){
    if(u != p){

      line.push_back({u, w});
      dfs(u, v, line);

    }
  }

}

void solve(vector<pair<int, ll>> vtx){

  int n = (int) vtx.size();

  // cout << "solve\n";
  // for(int i=0; i<n; i++) cout << vtx[i].first << " " << vtx[i].second << endl;
  // cout << endl;

  sum[0] = 0;

  for(int i=1; i<n; i++) sum[i] = sum[i - 1] + vtx[i].second;

  for(int i=0; i<n; i++) cost[i] = 1;

  for(int i=0; i<n; i++){

    int l = i, r = n - 1;

    while(l < r){

      int m = l + (r - l + 1) / 2;

      if(sum[m] - sum[i] <= k) l = m;
      else r = m - 1;

    }

    ans[vtx[l].first] += cost[i] * (ll) (n - l - 1);
    cost[l] += cost[i];

  }

  // for(int i=1; i<=n; i++) cout << ans[i] << " ";
  // cout << endl;

}

int main(){
  cin.tie(0)->sync_with_stdio(0);

  int n; cin >> n >> k;

  for(int i=1; i<n; i++){

    int a, b; ll l; cin >> a >> b >> l;

    a ++; b ++;

    adj[a].push_back({b, l});
    adj[b].push_back({a, l});

  }

  int root = 1;

  for(int i=1; i<=n; i++) if((int) adj[i].size() == 1) root = i;

  vector<pair<int, ll>> line = {{root, 0}};

  dfs(root, 0, line);

  solve(line);

  reverse(line.begin(), line.end());

  for(int i=(n - 1); i>0; i--) line[i].second = line[i - 1].second;

  line[0].second = 0;

  solve(line);

  for(int i=1; i<=n; i++) cout << ans[i] << "\n";

  return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...