P3574 [POI2014] FAR-FarmCraft 题解
题目需要我们从一号节点开始遍历整棵树,并给每一个节点记录下遍历到其的时间。
同时每一个节点又有一个自己的倒计时,当遍历到其的时候就开始计时。
我们需要求出所有节点中倒计时结束最慢的那一个的结束时间,并最小化之。
我们不难想象出一个简单的DP式子来求得最终的答案:
对于节点 的子树 ,我们有如下的DP式子:
其中 代表当前子树中最大的答案;
代表遍历过 所在的子树之前已经经过的所有子树的大小之和再乘以2,这个在遍历完毕整个子树之后会更新为该子树的大小乘以2。
我们可以发现,我们最终的答案跟遍历子树的顺序有关,于是我们考虑对其进行排序。
对于一个节点 的两个子树 和 ,我们假设先遍历 再遍历 。
这样的话,我们的答案就是 。
我们假定这个方案比交换两个子树的遍历顺序得到的答案更优。
交换两个子树的遍历顺序之后得到的答案就是 。
我们最终得到如下式子:
我们将不等式左右两边同时约掉 ,得到
因为 ,,所以一定是 与 之间的差值导致了答案的变化。
因此,我们可以得到
然后我们就可以按照这样的方法排序了。
参考代码如下:
__EOF__

本文作者:Kaiser Wilheim
本文链接:https://www.cnblogs.com/kaiserwilheim/p/16481902.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kaiserwilheim/p/16481902.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现