4.8 CW 模拟赛 T4. 银行的源起
思路
题意
给定一棵树, 树上的点有点权 , 边有边权, 要求选定两个点 , 使得
考虑在链上的做法, 要求复杂度 \(\mathcal{O}(n)\)
这个应该是没啥套路的, 上!
考虑到选择两个点之后, 这个链上的点会被分成两个部分, 然后贡献就是两个部分单算的了
但是问题又在于两个部分的贡献跟你具体选的位置也有关系这样
考虑错解不优的思想, 我们可以先枚举两个部分的分段, 然后两段分别找放点的的方式使得贡献尽量小
错解显然只会让答案上升, 并且我们这样可以保证枚举到最优解, 哎哎哎
然后两端最优解怎么做?
似乎可以 \(\mathcal{O}(n)\) 预处理, 但是有没有更好的做法?
好吧看来是没有的
考虑 \(\mathcal{O}(n^2)\) 的做法
套路
- 树上问题
- 距离
- 往往拆成与 有关的式子
- 拆成每一条边考虑
- 距离
不难发现对于树, 仍然是可以拆成每一条边考虑的
考虑枚举一条边, 然后这条边的两个部分分别求最优解, 不难发现可以 \(\mathcal{O}(n)\) 处理
\[\sum_{(x, fa) \in E} w \cdot \min \left( \text{size}_e x, S - \text{size}_e x \right) \]显然可以 \(\mathcal{O} (n)\) 处理, 相当于把距离拆分成边, 并且对边定向, 然后发现一定存在一个选点方式使得对于一个部分, 取到最优选点方式
总结
感觉是比较逆天的
双点拆成单点问题处理, 好做的多