Loading

长剖小记

长剖有啥用?如果一个 dp 的一维为和深度有关的东西,且信息是从子树合并而来的话,那么记树高为 \(m\)(一般卡满为 \(n\))则可以优化掉一个 \(m\)

主要思想:长链上的点共用一个 dp 数组,\(u\) 的信息直接继承 \(u\) 的长儿子,并做出一些修改,其余子树暴力合并,于是 dp 数组上深度维的大小就是其所在长链,而长链的和是 \(n\),所以复杂度是对的。

长剖有两种写法,一种是 vector,我觉得不好写,另一种是指针,感觉挺好的,就是可能有点危险,实际上长剖的题挺少的。

例 1: CF1009F
直接长剖。

例 2:P5904
直接长剖。dp 状态是好设计的。

例 3:noip2025 t3
前面的见我的题解,设计出 \(nm^2\) 的状态后可直接长剖优化至 \(\mathcal{O}(nm)\)

例 4:P4292
二分答案(好像叫分数规划)后长剖即可。

细节可以见该题题解区。

然后长剖还有个用途是 \(\mathcal{O}(n \log n) - \mathcal{O}(1)\)\(k\) 级祖先,这里不赘述,因为太慢了。

posted @ 2025-12-20 09:35  循环一号  阅读(0)  评论(0)    收藏  举报