先考虑一个显而易见的性质:假设其 u 所在的子树根为 rt(也就是说 u 所有的祖先都可以作为 rt)。由于 u 非重儿子,那么一定可以得到 siz_u\le \dfrac{siz_{rt}}2,如果不满足这个条件,那么 u 必然为重儿子。
当一个叶子节点 u 被删除后,被影响到是 u 到 1 的这一条链。考虑上述性质,可能被影响到的 v 必然有 siz_v\le \dfrac{siz_{rt}}2。从根节点往下跳,对于 首个 满足该性质的点 v 进行判断。那么剩下可能被修改的只能在 v\to u 的路径中。而子树 v 大小至少从子树 rt 减半,因此每一次操作最多会影响到 \mathcal O(\log n) 个节点。
我们只需维护每个子树的大小即可。这是经典的区间修改,单点查询问题,可以用树状数组维护。对于「往下跳」操作,可以用倍增从删除的叶子节点 u 往上跳,与倍增 LCA 是类似的。