Typesetting math: 17%

【讲题】Galaxy OJ 树形DP专题

树形DP专题

【题目传送门】
实际上我开始写题解的时候也没有全部A(我好弱)

T1 没有上司的舞会

  首先要设计 DPDP 状态:

  设 dpu, 0dpu, 0 为当节点 uu 不去时,以 uu 为根的子树产生的最大欢乐值;
  设 dpu, 1dpu, 1 为当节点 uu 去时,以 uu 为根的子树产生的最大欢乐值。

  我们假设现在 dfsdfs 到节点 uu ,节点 vvuu 的一个子节点,现在我们需要分类讨论:

  若 uu 去,则 vv 不可以去,即 dpu, 1= dpv, 0dpu, 1= dpv, 0
  若 u 不去,则 v 可去可不去,即 dpu, 0= max(dpv, 0,dpv, 1)

  综上所述,我们得到了正解。

  【代码】

T2 寻宝

  这是一道树上背包的题

  我们设 dpu, i 为在以 u 为根的子树上探险 i 天,所能获得的最大价值。

  首先 dfs 遍历整一棵树,对于节点 u 和它的子节点 v,为了求出 dpu,i 可以这样做:
  先在 [1, m] 枚举 i,接着在 [i, i2w]wuv 范围内枚举在以 v 为根的子树中的探险时间 j
  所以 dpu, i 获得了值为 dpv, j 的增益。然而 i 天没有全部用完,所以 dpu, i 还要加上 dpu, i2wj

  综上所述,状态转移方程为 dpu,i=max{dpv,j+dpu,i2wj}

  【代码】

T3 完美服务器

  这道题是 T1 的升级版。

  我们发现这一道题的每一个节点都与它周围的节点有关系,于是我们仿照 T1 写出了状态转移方程:

  设 dpu, 0 为当节点 u 为服务器时,以 u 为根的子树最少设置的服务器数量;
  设 dpu, 1 为当节点 u 有一个子节点为服务器时,~
  设 dpu, 2 为当节点 u 的父亲节点为服务器时,~

  接着是愉快的分类讨论推方程,我们的目标是求出 dpi, sta

  若 sta=0 ,就表示 u 为服务器,原式的初始值为 1 。因为 u 为服务器,那么 v 的状态只可以是服务器(0)或父亲为服务器(2),即 dpu, 0=1+max{dpv, 0, dpv, 2}
  若 sta=1 ,就表示 u 的儿子中有且仅有一个服务器。我们将状态转化一下可以得到:dpi, 0 表示 i 是服务器,父亲和儿子都不是; dpi, 2 表示 i 的父亲是服务器,儿子节点都不是。现在我们需要枚举 v 使得 u 的儿子中仅仅有 v 是服务器时的答案,所 以 dpi, 1=min{dpu, 2dpv, 1+dpv, 0}
  若 sta=2 ,就表示 u 的父亲是服务器,但儿子都不是。所以方程为 dpu,i= dpv, 1

  综上所述,我写得有点累……

  【代码】

T4 “访问”术馆

  这一道题和 T2 是同样的做法,需要注意的是因为题目要求的是在警察赶到之前,所以答案不是 dp0, s , 而是 dp0, s1

  【无代码】

T5 聚会的快乐

  这是一个披着 T5 幌子的假 T1(为什么我一直是90分?!)

  【无代码】

T6 世界杯

  【题解戳这里】

T7 有线电视网

  这道题也是树上背包,与T2有异曲同工之妙。

  设 dpu, i 表示在以 u 为根的子树中,选 i 个用户获得的最大收益。
  假设节点 vu 的一个儿子,我们在 u 的子树中选 i 名用户,在 v 的子树中选 j 名用户,可以得到: dpu, i=max{dpu, ij+dpv, j} 。对于每个叶子节点 x ,都有 dpx, 1=wi wi

  dfs 之后,找到一个最大的 i 使得 dp1, i0i 即为答案。

  【代码】

T8 重建道路

  【题解戳这里】

T6T8 的题解是大佬QSH写的~

本文作者:ExplodingKonjac

本文链接:https://www.cnblogs.com/ExplodingKonjac/p/13436141.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @ 2020-08-04 21:42  ExplodingKonjac  阅读(369)  评论(0)    收藏  举报
编辑推荐:
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
· 没有调度器的协程不是好协程,零基础深入浅出 C++20 协程
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
阅读排行:
· dotnetty 内存泄漏的BUG修复了
· 20250709 - GMX V1 攻击事件: 重入漏洞导致的总体仓位价值操纵
· Apipost 的AI功能真的还不错啊!建议后端开发和测试人员了解
· 面试官:如何实现大模型连续对话?
· MoneyPrinterTurbo – 免费开源的AI短视频生成工具
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起