【讲题】Galaxy OJ 树形DP专题
树形DP专题
【题目传送门】
实际上我开始写题解的时候也没有全部A(我好弱)
T1 没有上司的舞会
首先要设计 DPDP 状态:
设 dpu, 0dpu, 0 为当节点 uu 不去时,以 uu 为根的子树产生的最大欢乐值;
设 dpu, 1dpu, 1 为当节点 uu 去时,以 uu 为根的子树产生的最大欢乐值。
我们假设现在 dfsdfs 到节点 uu ,节点 vv 是 uu 的一个子节点,现在我们需要分类讨论:
若 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, i−2w](w为边u→v的边权)(没错,倒着枚举) 范围内枚举在以 v 为根的子树中的探险时间 j 。
所以 dpu, i 获得了值为 dpv, j 的增益。然而 i 天没有全部用完,所以 dpu, i 还要加上 dpu, i−2w−j。
综上所述,状态转移方程为 dpu,i=max{dpv,j+dpu,i−2w−j}
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, 2−dpv, 1+dpv, 0};
若 sta=2 ,就表示 u 的父亲是服务器,但儿子都不是。所以方程为 dpu,i=∑ dpv, 1。
综上所述,我写得有点累……
T4 “访问”术馆
这一道题和 T2 是同样的做法,需要注意的是因为题目要求的是在警察赶到之前,所以答案不是 dp0, s , 而是 dp0, s−1。
【无代码】
T5 聚会的快乐
这是一个披着 T5 幌子的假 T1 。(为什么我一直是90分?!)
【无代码】
T6 世界杯
T7 有线电视网
这道题也是树上背包,与T2有异曲同工之妙。
设 dpu, i 表示在以 u 为根的子树中,选 i 个用户获得的最大收益。
假设节点 v 是 u 的一个儿子,我们在 u 的子树中选 i 名用户,在 v 的子树中选 j 名用户,可以得到: dpu, i=max{dpu, i−j+dpv, j} 。对于每个叶子节点 x ,都有 dpx, 1=wi (wi为用户支付的钱数) 。
dfs 之后,找到一个最大的 i 使得 dp1, i≥0 , i 即为答案。
T8 重建道路
T6 和 T8 的题解是大佬QSH写的~
本文作者:ExplodingKonjac
本文链接:https://www.cnblogs.com/ExplodingKonjac/p/13436141.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个 java 空指针异常的解决过程
· 揭开 SQL Server 和 PostgreSQL 填充因子的神秘面纱
· 没有调度器的协程不是好协程,零基础深入浅出 C++20 协程
· 别做抢活的导演:代码中的抽象层次原则
· 从 Redis 客户端超时到 .NET 线程池挑战
· dotnetty 内存泄漏的BUG修复了
· 20250709 - GMX V1 攻击事件: 重入漏洞导致的总体仓位价值操纵
· Apipost 的AI功能真的还不错啊!建议后端开发和测试人员了解
· 面试官:如何实现大模型连续对话?
· MoneyPrinterTurbo – 免费开源的AI短视频生成工具