首先,条件可以抽象为 Y 不能相连,然后:

  • 钦定根为 YYX 的个数加上 \(2\);
  • 钦定某一个叶子节点为 YXY 的个数加上 \(1\);
  • 钦定某一个非叶子非根节点为 YYX 的个数加上 \(2\),XY 的个数加上 \(1\);

根据上面的讨论,YX 的个数一定为偶数,先判掉。

现在问题变成了一个二维的类独立集问题,直接设计 \(f_{u,i,j,0/1}\) 表示 \(u\) 的子树选出一个独立集填 Y 满足 XYYX 个数分别为 \(i,j\) 是否可行,\(u\) 选或者不选。

这个 DP 显然不能过,我们考虑优化。

讨论根是否选,现在变成只有两类物品,并且两类物品对于 XY 的贡献是相同的,设计 \(f_{u,i,0/1}\) 表示 \(u\) 内部的子树选出 \(i\) 个叶子填 Y,能选出来的最大独立集,根据 \(f\) 数组的值可以直接判断是否可以满足条件。

总时间复杂度是 \(O(n^2)\) 的,证明方法是考虑每一对叶子都会被枚举一次。

最新文章

  1. swift开源项目精选
  2. Linux 引导修复
  3. POJ2976 Dropping tests(01分数规划)
  4. js事件冒泡和事件委托
  5. memcached全面剖析--4
  6. angular.js的post数据方式
  7. Egret 纹理、计时器
  8. IDL 计算TVDI
  9. vr & obv
  10. 【Unity Shaders】Reflecting Your World —— Unity3D中简单的Cubemap反射
  11. Python IO密集型任务、计算密集型任务,以及多线程、多进程
  12. H5外包团队 android视频压缩,使用ffmpeg方案
  13. 【repost】js window对象属性和方法相关资料整理
  14. jquery 上下滚动显示隐藏
  15. JAVA多线程17个问题
  16. 彻底关闭win10后台同步数据(转自技术社区)
  17. electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
  18. linux下网络查看命令ss
  19. Antd前端开发采坑记录
  20. poj_2553 强连通分支&出度为0的点

热门文章

  1. Jmeter 之 jp@gc - Stepping Thread Group
  2. Spark下中文分词常用项目
  3. Hive详解(06) - Hive调优实战
  4. Ubuntu 安装播放器
  5. vulnhub靶场之HACKSUDO: PROXIMACENTAURI
  6. KingbaseES在线wal日志
  7. 汉诺塔 Java && Cpp 实现
  8. QT 5 中文乱码,试试在PRO文件加入这几行代码
  9. 强大的word插件,让工作更高效:不坑盒子 2023版
  10. XMind 2022 安装教程 (11-30亲测有效)