这题……半年前写了没调出来……
首先不考虑第一个操作,这不就是「Count on a Tree」?
沿用之前的想法,把路径信息转化为到根的路径信息相减。
那么考虑连边,即合并。
于是——
启(大)发(力)式 合 并!
首先用 dsu 找根,然后在合并的时候先判大小,把小的接到大的上去,均摊分析下最多合并 O(logn) 次。
然后 DFS 更新重儿子和重链顶(是的没错我用树剖做 LCA)以及主席树。
树剖常数还是比 LCT 和倍增小很多的……
目前 BZOJ 第三优解。
代码:
1 |
|
这题……半年前写了没调出来……
首先不考虑第一个操作,这不就是「Count on a Tree」?
沿用之前的想法,把路径信息转化为到根的路径信息相减。
那么考虑连边,即合并。
于是——
启(大)发(力)式 合 并!
首先用 dsu 找根,然后在合并的时候先判大小,把小的接到大的上去,均摊分析下最多合并 O(logn) 次。
然后 DFS 更新重儿子和重链顶(是的没错我用树剖做 LCA)以及主席树。
树剖常数还是比 LCT 和倍增小很多的……
目前 BZOJ 第三优解。
代码:
1 | #include <cstdio> |
Related Issues not found
Please contact @Alpha1022 to initialize the comment