求调
  • 板块灌水区
  • 楼主pengbonan
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/6 11:21
  • 上次更新2024/8/6 12:29:40
查看原帖
求调
1005693
pengbonan楼主2024/8/6 11:21

P3047

#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 10, K = 20 + 5;
vector <int> E[N];
int r[N];
int ans_fr_so[N][K], ans_fr_fa[N][K];
int n, k;
void dfs1 (int x, int fa) {
	for (int i = 0; i <= k; i ++)
		ans_fr_so[x][i] = r[x];
	for (auto k : E[x]) {
		if (k == fa)
			continue;
		dfs1(k, x);
		for (int i = 1; i <= k; i ++)
			ans_fr_so[x][i] += ans_fr_so[k][i - 1];
	}
}
void dfs2 (int x, int fa) {
	for (auto k : E[x]) {
		if (k == fa)
			continue;
		ans_fr_fa[k][1] += ans_fr_so[x][0];
		for (int i = 2; i <= k; i ++)
			ans_fr_fa[k][i] += ans_fr_fa[x][i - 1] - ans_fr_so[k][i - 2];
		dfs2(k, x);
	}
}
signed main () {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	cin >> n >> k;
	for (int i = 1; i < n; i ++) {
		int u, v;
		cin >> u >> v;
		E[u].push_back(v);
		E[v].push_back(u);  
	}
	for (int i = 1; i <= n; i ++)
		cin >> r[i];
	dfs1(1, 0);
	for (int i = 1; i <= n; i ++)
		for (int j = 0; j <= k; j ++)
			ans_fr_fa[i][j] = ans_fr_so[i][j];
	dfs2(1, 0);
	for (int i = 1; i <= n; i ++)
		cout << ans_fr_fa[i][k] << '\n';
	return 0;
}

20pts,其他点 TLE5 个 WA 3个

2024/8/6 11:21
加载中...