连标题都不想搞了,单纯的记录一下树上主席书的学习过程。
这个可以干什么呢?快速的找到一条路径的的信息。
思路: [ x ] [x] [x]表示根节点到 x x x路径上的点的信息的主席树,构建方式为每个点建链,从上至下合并,即 m e r g e ( [ x ] , [ f a [ x ] ] ) merge([x],[fa[x]]) merge([x],[fa[x]])即可。
然后路径的主席树则为: [ x ] + [ y ] − [ l c a ( x , y ) ] − [ f a [ l c a ( x , y ) ] ] [x]+[y]-[lca(x,y)]-[fa[lca(x,y)]] [x]+[y]−[lca(x,y)]−[fa[lca(x,y)]]。
事实上:之前的肥宅快乐主席树好SB的名字的树上第k小练习就是如此。
当然,还有一道练习:[SCOI2015]情报传递,也可以用树上主席树做。
为了不太水,聊聊带修改的问题?
额,口胡一个吧,考虑
D
F
S
DFS
DFS序,即进去放一次,回溯放一次的数组,这样每个点会在数组中出现两次,然后不难发现,前面一次为+,后面一次为
−
-
−,
[
1
,
i
]
[1,i]
[1,i]刚好就是
i
i
i到根节点的信息,然后转化为序列的带修改,然后类似维护即可。