树 社论
题面
(BZOJ3306)
维护一棵有根树,支持
- 换根
- 修改点权
- 查询子树点权 \(\min\) .
题解
正解
维护 DFS 序,修改点和查询子树点权 \(\min\) 都非常容易 .
丢掉根,随便选一个当根,然后统计答案的时候分类看看即可:
- 查询根的子树
- 根在查询的子树内
- 根在查询的子树外
随便搞搞,见下
代码我都看不下去了,就不放了 .
口胡
因为实在太难写了,摆烂了
维护 DFS 序,修改点和查询子树点权 \(\min\) 都非常容易 .
我就是要换根,换根的时候考虑 DFS 序是怎么变的,因为我懒的放图了,你感性理解一下,一次换根可以拆成 \(6\) 次区间翻转 .
维护 DFS 序和子树大小,这样才能统计答案,子树大小的变化就是一个区间加 .
维护
- 区间翻转
- 区间加(单点修改)
- 区间 \(\min\)(单点查询)
括号里是包含关系 .
于是上几棵文艺平衡树暴艹,就能过去了 .
复杂度不变 .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/15843058.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ