P9128 [USACO23FEB] Fertilizing Pastures G
咋没人写题解/fn
考虑行走的过程跟你 dfs 一棵树的过程是等价的,所以 时走的边数为 , 时,当遍历完最后一个点 时,不用再回溯到 ,因此少了 的时间。
那么你一旦进去一个点,你不走完它子树内的所有结点,它一定不会出来,倘若未走完就出来,则时间花费一定更劣。
考虑 时咋做,记 从 出发走完 子树并回到 的最小花费,显然你要安排各个儿子间的顺序,记其为序列 ,使得 最小,即一定是走第一个儿子,然后出来,此时第二个儿子的时间点就多了第一个走进去又走出来的时间。这种往往可以考虑单独拎两个考虑在 中的先后关系,你假设 先还是 先然后分别计算其贡献即可。又因为你这个偏序关系有传递性,所以你直接 sort 就是对的。需要注意的是,当你当前考虑的子树根不为 的时候,你应该设其初始时间为 ,这样你从父亲从儿子转移的时候才好转移,因为会经过一条边。而注意当考虑 的时候,初始时间应设为 。这样设立的原因其实还有一点是你当根不为 时,你需要在根花费 1 单位时间。不这样的话,你可以不降 计入 同样也可以做。
考虑 ,显然还是类似,只不过你一定存在一个点,使得它在它的祖先当中永远是最后走的。这个点需要满足其深度最深。当然,显然这个点不唯一。因此你要把这个点贪出来。具体的,在当前树根为 时,记当前有资格最后走的点集为 ,那么你不是最后走的你内部不必钦定最后走的点,只需按 的做法做即可。所以同样的,拎出 进行比较即可。
总结,这类贪心确定排列顺序问题往往可以通过点对间的偏序来确定,因此分析的时候可以考虑一对,然后计算极端情况贡献,即仅考虑当前序列只有这两个元素,这两个元素的先后各自的贡献。
__EOF__

本文链接:https://www.cnblogs.com/xugangfan/p/17201871.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】