当前位置: 首页 > news >正文

树上背包+换根DP

树上背包

例题:[HAOI2015] 树上染色

题面描述

有一棵点数为 \(n\) 的树,树边有边权。给你一个在 \(0 \sim n\) 之内的正整数 \(k\) ,你要在这棵树中选择 \(k\) 个点,将其染成黑色,并将其他的 \(n-k\) 个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的距离的和的收益。问收益最大值是多少。

做法

\(DP_{u, j}\) 表示以 \(u\) 节点为根的子树选取 \(j\) 个点染成黑色的最大值

那么我们的价值怎么算呢?

我们知道当前子树 \(u\) 内有 \(j\) 个点染成了黑色,那么另一个子树 \(v\) 它子树内一定是 \(k - j\) 个黑色的点。

而结果其实就是 \(u\) 子树内的黑点个数 \(\times\) \(v\) 子树内的黑点个数 \(+\) \(u\) 子树内的白点个数 \(\times\) \(v\) 子树内的白点个数

写出来就是

\[j \times (k - j) \times w + (size_v - j) \times (n - size_v - (k - j)) * w \]

代码

void dfs(int u, int fa) {sz[u] = 1;for (auto X : g[u]) {int v = X.first, w = X.second;if (v == fa) continue;dfs(v, u);pre(i, min(sz[u], k), 0) pre(j, min(k, sz[v]), 0) dp[u][i + j] = max(dp[u][i + j], dp[u][i] + dp[v][j] + j * (k - j) * w + (sz[v] - j) * (n - sz[v] - (k - j)) * w);sz[u] += sz[v];}
}

换根DP

意义

简而言之就是给树换了个根,更方便求答案。

例题:P10962 Computer

题目描述

某学校在一段时间前购买了第一台计算机(因此这台计算机的编号是 1)。在最近几年中,学校又购买了 \(N-1\) 台新计算机。每台新计算机都连接到之前已经安装的计算机之一。学校的管理人员对网络运行缓慢感到担忧,想知道每台计算机需要发送信号的最大距离 \(S_i\)(即到最远计算机的电缆长度)。你需要提供这些信息。

形式化题意

给定一棵 \(n\) 个节点的树,求出每个节点到树中其他节点的最大距离。输出每个节点的最大距离。

解法

当以 \(1\) 为编号时,算出了所有的距离,你会发现有一部分可以重复使用。这,就是换根DP

剩下的DP定义就很简单了

代码

戳我看代码
vector<pii> g[N];
int dp1[N], dp2[N];void dfs1(int u, int fa) {for (auto X : g[u]) {int v = X.first, w = X.second;if (v == fa) continue;dfs1(v, u);int val = dp1[v] + w;if (dp1[u] < val) swap(dp1[u], val);if (dp2[u] < val) swap(dp2[u], val);}
}void dfs2(int u, int fa) {for (auto X : g[u]) {int v = X.first, w = X.second;if (v == fa) continue;int val = 0;if (dp1[v] + w == dp1[u]) val = dp2[u] + w; else val = dp1[u] + w;if (dp1[v] < val) swap(dp1[v], val);if (dp2[v] < val) swap(dp2[v], val);dfs2(v, u);}
}
http://www.jsqmd.com/news/346877/

相关文章:

  • 企业AI能力评估与供应商选择:AI应用架构师教你如何用评估结果筛选合作方
  • 智能数字资产登记系统数据存储架构:AI应用架构师的选型指南
  • 知识图谱在AI原生应用中的核心作用解析
  • 解离单细胞 (scRNA-seq),都被解离了,那是怎么测出单细胞Gene的表达量的
  • leetcode 909. Snakes and Ladders 蛇梯棋-耗时100
  • 大整数哈希
  • 海伯森点光谱应用案例之--医用胶囊盖体弧度检测
  • Scaling Up to Excellence: Practicing Model Scaling for Photo-Realistic Image Restoration-CVPR2024
  • 32岁程序员猝死:让我想起了我曾经的加班经历,庆幸自己还活着
  • 详解 MySQL 数据库索引实现机制 - B 树和 B + 树
  • 2026.2.5
  • AI应用架构师教你:企业知识库AI助手的日志分析架构
  • 《深度洞察:AI应用架构师谈人机协作对未来工作的深远意义》
  • 数据不出门,也能一起“卷模型”——聊聊隐私保护下的联邦学习:原理与工程实践
  • 图论专题
  • Neo4j Cypher查询语言:大数据分析的利器
  • 2026年创意巴士广告厂家最新推荐:双层巴士广告/应援巴士广告/应援车广告/快闪巴士/创意大巴车广告/创意车体广告/选择指南 - 优质品牌商家
  • 【 2025 年终总结】被推着走的一年,需要停下来思考
  • 实用指南:Rust 练习册 :深入探索XOR加密与流密码
  • Windows 也能跑 OpenClaw!最完整安装教程 + 飞书接入,全程避坑
  • 2026年创意车体广告厂家最新推荐:双层车身广告、宣传车广告、巡展车广告、巡游车广告、巴士车身广告、应援巴士广告选择指南 - 优质品牌商家
  • Animation控制单条动画播放(手动设置起始帧、结束帧)
  • 必读:用NFT存证你的开源代码贡献值
  • 生物计算测试的崛起与测试员能力重构
  • 情感驱动:星际团队如何建立“光年信任”——软件测试公众号热度内容解析与实战指南
  • 重力适应:2026太空“测试场”上的女性破壁者
  • deepinV23文件管理器改造
  • ‌2026年软件测试热度趋势与生物计算伦理融合报告
  • 高原缺氧环境下的AI压力测试:拉萨样本实战与爆款密码
  • 2026年机械真空泵厂家最新推荐:罗茨真空泵/螺杆式真空泵/螺杆泵真空泵/干式无油螺杆真空泵/干式真空泵/干式螺杆真空泵/选择指南 - 优质品牌商家