main
黄海 2 years ago
parent 79d14c31ac
commit e4a9eb9cde

@ -783,18 +783,15 @@ int n, k;
void dfs1(int u, int fa) {
// 初始化当遍历到u节点时u的拆分状态中最起码包含了自己的点权值
for (int i = 0; i <= k; i++) f[u][0] = val[u];
for (int i = 0; i <= k; i++) f[u][i] = val[u];
// 枚举u的每一个子节点
for (int i = h[u]; ~i; i = ne[i]) {
int v = e[i];
if (v == fa) continue; // 如果是u的父亲那么就跳过,保证只访问u的孩子
// 递归,利用子更新父
dfs1(v, u); // 递归填充v节点的信息
// 在填充完子节点v的统计信息后利用儿子们的填充信息完成父亲节点信息的填充
// for(j=1,j<k,j++): f[u]j=1层汇集的数据累加在一起就是f[u][j]的数据
// 最多计算k层足够用了
// 先递归,// 递归填充v节点的信息
dfs1(v, u);
// 再利用子节点信息更新父节点信息
for (int j = 1; j <= k; j++) f[u][j] += f[v][j - 1];
}
}

Loading…
Cancel
Save