题目链接
题目解法
考虑如何计算 f ( U ) f(U) f(U),我不知道如何能想到下面的解法
一个技巧是把路径挂在 l c a lca lca 上
我们令 f u f_{u} fu 表示完全包含在 u u u 的子树中的路径的最大独立集
考虑转移,记 s u m u = ∑ v ∈ s o n ( u ) f v sum_{u}=\sum\limits_{v\in son(u)}f_v sumu=v∈son(u)∑fv
- 如果 u u u 不在任何一条选中的路径上
f u = s u m u f_u=sum_u fu=sumu - u u u 在权值为 w w w 的路径 x → y x\to y x→y 上
考虑对于 x → u x\to u x→u 和 y → u y\to u y→u 的路径分别考虑,先给出式子:
f u = s u m u + w − ∑ q ∈ p a t h ( x , u ) 或 q ∈ p a t h ( y , u ) ( f q − s u m q ) f_u=sum_u+w-\sum\limits_{q\in path(x,u)\;或\;q\in path(y,u)}(f_q-sum_q) fu=sumu+w−q∈path(x,u)或q∈path(y,u)∑(fq−sumq)
需要减去 f q − s u m q f_q-sum_q fq−sumq 是因为 p a t h ( x , y ) path(x,y) path(x,y) 上的点都不能被选在其他的路径上,而我们的状态天然契合 f q − s u m q f_q-sum_q fq−

文章介绍了使用深度优先搜索和位操作数据结构处理图中路径相关问题,计算在特定路径影响下的子树最大独立集的算法
最低0.47元/天 解锁文章
994

被折叠的 条评论
为什么被折叠?



