创世纪

算法#

观察到把每个 aii 连边, 形成一个外向基环树森林
问题转化为

在一个基环树上, 选择一个点后, 其儿子节点至少有一个不能选, 求最大选点个数

对于森林中的每一棵基环树
容易想到找环, 对于环上每一点, 问题转化为树上的上述问题
显然是树形 dp
fx,0/1 表示以点 x 为根节点, 是否选择 x , 其子树中最大选点个数

{fx,0maxyson(x)(fy,0,fy,1)fx,1maxyson(x)[fx,0max(fy,0,fy,1)+fy,0+1]=maxyson(x){fx,0[max(fy,0,fy,1)fy,0]+1}

这是好求的

环上处理#

环上有 N 个点, 每个点有贡献 Wi=fi , 求选点最大贡献和, 其中, 不能选择相邻的点

dpi 表示考虑到 i 点的最大贡献
钦定第一个必选, 按链的方式做一次

dpi[3,N1](maxj[1,i2]dpj)+Wi

再钦定第一个不选, 按链的方式做一次

dpi[2,N](maxj[1,i2]dpj)+Wi

断环处理#

断掉环上一条边, 基环树变成一棵树

考虑解决掉删除这一条边的问题

  • 使用这一条边
  • 不使用这条边

代码#

总结#

基环树 + 常见树上 dp + 环上 dp
基环树一般都是一大堆 树上 / 图上知识串起来

这个树形 dp 算比较典的, 但我最初推出来的还是错的
​注意消除删边影响这一类题, 通常是跑两次
内向树不好处理, 考虑建反向边

注意内外向树的判定

posted @   Yorg  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示