树 社论

题面

BZOJ3306

维护一棵有根树,支持

  • 换根
  • 修改点权
  • 查询子树点权 \(\min\) .

题解

正解

维护 DFS 序,修改点和查询子树点权 \(\min\) 都非常容易 .

丢掉根,随便选一个当根,然后统计答案的时候分类看看即可:

  • 查询根的子树
  • 根在查询的子树内
  • 根在查询的子树外

随便搞搞,见下


代码我都看不下去了,就不放了 .

口胡

因为实在太难写了,摆烂了

维护 DFS 序,修改点和查询子树点权 \(\min\) 都非常容易 .

我就是要换根,换根的时候考虑 DFS 序是怎么变的,因为我懒的放图了,你感性理解一下,一次换根可以拆成 \(6\) 次区间翻转 .

维护 DFS 序和子树大小,这样才能统计答案,子树大小的变化就是一个区间加 .

维护

  • 区间翻转
  • 区间加(单点修改)
  • 区间 \(\min\)(单点查询)

括号里是包含关系 .

于是上几棵文艺平衡树暴艹,就能过去了 .

复杂度不变 .

posted @ 2022-01-25 15:07  Jijidawang  阅读(47)  评论(0编辑  收藏  举报
😅​