Submission #1140643

#TimeUsernameProblemLanguageResultExecution timeMemory
1140643KaleemRazaSyedPetrol stations (CEOI24_stations)C++20
0 / 100
114 ms10584 KiB
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 70000 + 10, K = 10 + 10;
vector<pair<int,int> > G[N], path;
ll ans[N];
int n, k;

void dfs(int v, int p = 0, int W = 0)
{
  path.push_back({v, W});
  for(auto [u, w] : G[v])
    if(u != p) dfs(u, v, w);
}

void evaluate()
{
  int cnt[n] = {}, j = 1;
  int sm = k;
  
  for(int i = 0; i + 1 < n; i ++)
    {
      j = max(i + 1, j);
      while(j < path.size() && sm - path[j].second >= 0)
	sm -= path[j].second, j++;
      cnt[j] += cnt[i] + 1;
      sm += path[i + 1].second;
    }
  

  cnt[n - 1] = 0;
  for(int i = 0; i < n; i ++)
    ans[path[i].first] += 1ll * (n - i - 1) * (cnt[i]);
}

int main()
{
  cin >> n >> k;
  for(int i = 1; i < n; i ++)
    {
      int u, v, w;
      cin >> u >> v >> w;
      G[u].push_back({v, w});
      G[v].push_back({u, w});
    }

  for(int i = 0; i < n; i ++)
    if(G[i].size() == 1) {
      dfs(i);
      evaluate();
      path.clear();
    }

  for(int i = 0; i < n; i ++)
    cout << ans[i] << endl;
    
  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...