Submission details
Task:Stations
Sender:aatukaj
Submission time:2025-03-03 16:26:54 +0200
Language:C++ (C++17)
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'void subtask3()':
input/code.cpp:91:15: error: template argument 1 is invalid
   91 |         vector<
      |               ^
input/code.cpp:91:15: error: template argument 2 is invalid
input/code.cpp:93:1: error: expected unqualified-id before '}' token
   93 | }
      | ^

Code

#include <bits/stdc++.h>
using namespace std;

const int mxN = 7e4;
using pii = pair<int, int>;
using ll = long long;
vector<pair<int, ll>> adj[mxN];
int n;
ll k;
int sz[mxN];
ll ans[mxN];


int calc_sz(int v, int p) {
	sz[v] = 1;
	for (auto [u, _]: adj[v]) if (u!=p) sz[v] += calc_sz(u, v);
	return sz[v];
}
void dfs(int v, int p, ll dist) {
	for (auto [u, w]: adj[v]) if (u!=p) {
		ll new_dist = dist;
		if (dist+w>k) {
			ans[v]+=sz[u];
			new_dist = 0;
		}
		dfs(u, v, new_dist+w);
	}
}
void subtask1() {
	for (int i=0; i<n; i++) {
		calc_sz(i, -1);
		dfs(i, -1, 0);
	}
}
int dp[mxN][11];

int add_dp(int u, int v, int w, int sgn) {
	int cnt = 0;
	for (int i=0; i<=k-w; i++) {
		dp[v][i+w] += sgn*dp[u][i];
	}
	for (int i=k-w+1; i<=k; i++) {
		cnt += dp[u][i];
	}
	dp[v][w] += sgn*cnt;
	return cnt;

}

void dfs1(int v, int p) {
	dp[v][0] = 1;
	for (auto [u, w]: adj[v]) if (u!=p) {
		dfs1(u, v);
		int cnt = add_dp(u, v, w, 1);
		ans[u] += 1ll*(n-sz[u])*cnt; 
	}

}
void dfs2(int v, int p) {
	for (auto [u, w]: adj[v]) if (u!=p) {
		add_dp(u, v, w, -1);
		int cnt = 0;
		for (int i=0; i<=k-w; i++) {
			dp[u][i+w] += dp[v][i];
		}
		for (int i=k-w+1; i<=k; i++) {
			cnt += dp[v][i];
		}
		dp[u][w] += cnt;
		ans[v] += 1ll*(sz[u])*cnt;
		dfs2(u,v );

		for (int i=0; i<=k-w; i++) {
			dp[u][i+w] -= dp[v][i];
		}
		dp[u][w] -= cnt;
		add_dp(u, v, w, 1);
	}
}



void subtask5() {
	calc_sz(0, -1);
	dfs1(0, -1);
	//cout << "FIRST DONE" << endl;
	dfs2(0, -1);
}
vector<int> ord;
void subtask3() {
	vector<

}


void solve() {
	cin >> n >> k;
	for (int i=0; i<n-1; i++) {
		int u, v, w;
		cin >> u >> v >> w;	
		adj[u].push_back({v, w});
		adj[v].push_back({u, w});
	}
	if (n<=1000) subtask1();
	else subtask5();
	for (int i=0; i<n; i++) cout << ans[i] << ' ';
	cout << '\n';
} 
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	solve();
}