树链剖分
Freopen
这个作者很懒,什么都没留下…
展开
-
CodeForces - 1254D Tree Queries(重链剖分)
题意: 操作一:给出v,dv,dv,d,给每个vvv的相邻节点uuu,给uuu的子树加上(n−szu)dn\frac {(n-sz_u)d}nn(n−szu)d,并给vvv加上ddd。(这里是把vvv看做根进行的表述) 操作二:求一个点的值。 这类套路题可以用重链剖分解决。 将一个点对儿子的贡献分成对重儿子和轻儿子的贡献。 重儿子直接加。 轻儿子自己爬上来取自己应该加的值。 所以就O(nlogn)O(n\log n)O(nlogn)了。 #include<bits/stdc++.h> #d原创 2020-06-08 20:04:25 · 348 阅读 · 1 评论 -
黑白树V2
题目 1.设每个点的权值为u−fauu-fa_uu−fau,那么两个黑点的贡献就是他们到根的链并的权值和,可以通过链加求链和解决询问和单点修改。 2.对于子树修改,先对于这个奇数距离,开两个数据结构分别维护深度为奇数和深度为偶数的,那么就是子树翻转加上链加,可以再计算白点的链和来实现子树翻转标记。 3.注意需要求子树内黑点个数。 4.其实不是很长,只是询问修改操作很多而已。 AC Co...原创 2020-05-06 16:20:36 · 259 阅读 · 0 评论