考完了可以发题解了。
做法是link-cut tree维护子树信息,并不需要维护黑树白树那些的。
下面是一条重链:
如果4是根的话,那么在splay上是这样的:
在splay中,子树的信息都已经计算完毕,那么需要计算这个子树的答案。
这个子树有4个部分:
4:树根。
1,2,3:树根上面的点。
5,6:树根下面的点。
other:树根的虚子树。
那么简化一下:
显然是需要记录答案的,还要记录什么?
- 3,4会受到1,2的影响,所以答案要加上3,4中黑点数×1,2中权值和
- 1会受到2的影响,所以答案要加上1中黑点数×2中权值和
- 没了。剩下的都在原来就计算好了。
所以还要记子树黑点数和权值和。
然后就做完了。
吗?
注意一下,splay有reverse操作,所以还要记一个反的答案(丧心病狂,,,),不过虚子树答案不用反过来。
代码太长丢链接跑:https://loj.ac/submission/94648