From 0b23ef0f07db8fa7930f1083153a265642fece1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Mon, 15 Jan 2024 13:45:12 +0800 Subject: [PATCH] 'commit' --- TangDou/Topic/HuanGenDp/P3047.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/TangDou/Topic/HuanGenDp/P3047.cpp b/TangDou/Topic/HuanGenDp/P3047.cpp index 059210a..7dda0fa 100644 --- a/TangDou/Topic/HuanGenDp/P3047.cpp +++ b/TangDou/Topic/HuanGenDp/P3047.cpp @@ -15,13 +15,17 @@ int val[N]; // 点权数组 int n, k; void dfs1(int u, int fa) { - for (int i = 0; i <= k; i++) f[u][i] = val[u]; + // 初始化:当遍历到u节点时,u的拆分状态中,最起码包含了自己的点权值 + for (int i = 0; i <= k; i++) f[u][0] = val[u]; + // 枚举u的每一个子节点 for (int i = h[u]; ~i; i = ne[i]) { int v = e[i]; - if (v == fa) continue; - dfs1(v, u); - + if (v == fa) continue; // 如果是u的父亲,那么就跳过,保证只访问u的孩子 + dfs1(v, u); // 递归填充v节点的信息 + // 在填充完子节点v的统计信息后,利用儿子们的填充信息,完成父亲节点信息的填充 + // for(j=1,j