Dynamic Trees
One of my interests is data structures, specifically dynamic trees. Unfortunately, there are few English resources for some of these, which has lead me to reading several Chinese blogs.
One topic that I had particular difficulty finding English resources for was the self-adjusting top tree, known in Chinese as the AAA 树. It can be best described as the marriage between an Euler Tour Tree and a Link/Cut Tree, allowing for operations to be performed on both paths and subtrees.
This is achieved by constructing a splay tree of all virtual edges in a link/cut tree.
Thus each node has four children: the normal two real edges, and then the children in the splay tree.
The advantage of this setup is that lazy propagation can be performed on subtrees by considering lazy flags on the splay tree of virtual edges, taking care to separate them from the lazy flags on the real edges.
Interestingly, the access
operation still takes O(log N) time…but none of the source I have read explain why.
Unfortunately, I do not have a sample implementation as this has too high a constant factor to test on the DMOJ judge’s copy of SONE1.
I have heard that using a 5th child to represent the top node of the splay of virtual edges is a sufficient constant optimization, but have not yet had time to test this myself.