原题链接
解题思路:
是对子树的 *** 作,容易想到dfs序,但又是对深度小于等于k的子树 *** 作,在dfs序中不是连续的,如果考虑bfs序,深度是递增的,但是连续的段又不满足是子树,也不行。
本题的特点是查询只有一次,故可以离线,对于任意一个点,只有他的所有父会产生影响,还是考虑dfs ,这样每遍历一个点他的所有父一定已经访问过了,用数据结构维护一个深度段(树状数组,线段树都可),每访问到一个点,把他的 *** 作全做一边,(区间加 *** 作,经典差分)。此时,这个点的答案直接在数据结构里查询就可以。(影响他的点已经全 *** 作过了)
仅仅这样还有一个问题,数据结构维护的是深度,每次子树访问结束时,要回退所有 *** 作。(举个最简单的例子,根结点的左右子树有相同的深度,如果不回退就会产生影响)
Code:
#include
#include
评论列表(0条)