Description
有一个\(n\)个点的带边权树,要求你取出\(k + 1\)条点不相交的链(链可以只有一个单点),使得这些链的边权和最大。
\(0\leq k< n\leq 3\times 10^5\),边权绝对值不超过\(10^6\)。
Solution
wqs二分第三题……
下面说的\(k\)默认都是原题中的\(k + 1\)。
要是\(nk\)不大的话,那么有一个经典的搞法就是树上DP,记状态\(f_{i,s.0/1/2}\)表示点\(i\)这个子树总共取了\(k\)条链,\(i\)本身在这些链中度数为\(0/1/2\)的情况的最优解,转移还是比较显(fan)然(suo)的……
然后\(nk\)很大……但是发现这种东西取了有收益,然后还有数量限制,要素察觉(意味深)
虽然这个东西的凸性只能感性理解或者打表理解了……我真的不会证啊
然后考虑wqs二分……具体方法就是wqs二分,里面的DP就把上面的DP去掉链数限制就行了。
然后存在一个问题就是,假设二分出来一个\(v\),但是代价为\(v\)的时候链数比\(k\)小,代价为\(v-1\)的时候链数就比\(k\)多了。这样的话当代价为\(v\)的时候照样存在\(k\)条链的最优解,所以在\(v\)时的最优解中补上一个\(kv\)就完了……
Code
1 |
|