体力值相当于限制了路径的长度不能超过 $D$,而存在一个时刻获得印章的方案数不方便计算,转为计算不合法的方案数,也就是所有时刻均不能获得印章。
点分治,每次处理包含某个分治中心 $x$ 的路径。设 $d_u$ 表示结点 $u$ 的深度,并且定义 $d_x = 0$,那么设起点的深度为 $d_0$,那么对于前半段路径上的所有点 $u$,均需要满足 $d_0 - d_u < T_u$,后半段路径上的所有点 $u$,均需要满足 $d_0 + d_u < T_u$,这两个限制可以写成两个端点到根的路径上 $T_u \pm d_u$ 的最小值的限制。通过处理前后缀信息等优化,可以在线性的时间复杂度内处理经过分治中心 $x$ 的路径。
总时间复杂度为 $\mathcal{O}(n \log n)$。