CF1856E1 PermuTree (easy version) 题解
假定当前在节点 \(u\),它拥有两棵子树 \(v,w\),此时 \(u\) 是 \(\operatorname{lca}(v,w)\)。
我们一定可以构造出一个排列 \(a\),使得所有满足 \(i \in v\) 的节点 \(i\) 和满足 \(j \in w\) 的节点 \(j\),有 \(a_i<a_u<a_j\)。
因此此时点 \(u\) 对于答案的贡献即为 \(size_v \times size_w\),其中 \(size_u\) 表示节点 \(u\) 的子树大小。
进一步推广,若节点 \(u\) 拥有多棵子树,则考虑将 \(u\) 的子树分成两个集合 \(S,T\),最大化 \(\sum_{i \in S} i \times \sum_{j \in T} j\)。
我们考虑进行树上 01 背包,若能分成大小为 \(x\) 的集合 \(S\),则节点 \(u\) 对于答案的贡献即为 \(x \times (size_u-x)\)。
时间复杂度 \(O(n^2)\)。代码。
标签:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】