NOI 2021 D1T1 题解
近五年 NOI 最难的 D1T1。
此前题解的做法有两种:LCT 以及转化为颜色段,但这两种做法都不是我首先想到的。
将题目里的“重儿子”称为关键儿子。
由于这题看起来就是签到题,直接上个树剖暴力维护,考虑修改时每条重链上做了什么:
链顶到当前点之间的部分(不包括当前点)的关键儿子有且仅有重儿子。
当前点:关键儿子仅有上一次的链顶(一个轻儿子)。
所以我们对每个点维护两个信息:
-
重儿子是否是关键儿子。
-
是否存在轻儿子是关键儿子,如果存在则记录。
一个点最多有两个关键儿子,所以 2. 中只需要记录两个。
然后修改和查询就是一些简单的线段树上区间操作,相信不用多说。
注意 LCA 父亲处的细节。
时间复杂度为