题解 P7359 【旅行】
简单说下我的做法吧。
对于树上的每一条链,我们可以通过维护一些信息来使得两条链之间可以合并。
那么一个显然的思路是维护:
-
该链的两端都不开船的最小花费
a -
该链的下端开船,上端不开船的最小花费
b -
该链的上端开船,下端不开船的最小花费
c -
该链的两端都开船的最小花费
d
那么显然最简单的情况也就是只有一条边的情况,我们以此为边界。
然后就是考虑如何合并两条链
设合并完的链为
既然已经支持合并,那么可以直接倍增瞎搞了。
当然还有很多细节要处理,不过都是一些小问题了。
代码就不放了,写得太丑了(