虚树

树上对于某几个特殊的点和其两两的 LCA 构成的树。

常用于解决关键点少或多次询问给定点集、答案与树除了关键点以外的形态无关的问题。

构建方法是:

维护栈,表示从根到虚树现在节点的路径,每次加入按如下流程操作:

如果目前的栈顶是加入点的祖先,直接入栈。否则设栈顶和点的 LCA 是 \(x\)

如果栈顶不是祖先,不断弹栈,直到栈为空或栈顶是 \(x\) 的祖先。

然后如果 \(x\) 不在栈内,顺序插入 \(x\) 个待插入点即可。

最后清空栈。注意每次弹栈都要和栈顶连边。

posted @ 2023-03-30 15:14  infinities  阅读(12)  评论(0编辑  收藏  举报