其他分享
首页 > 其他分享> > 虚树

虚树

作者:互联网

虚树一般用于树形DP中,此类问题通常询问次数很多每次询问涉及到的点数很少。若每次询问均对整棵树进行DP,时间复杂度是巨大的。所以我们采用虚树这种数据结构。

虚树的构建

inline void insert(int u){
	if(top==1){stk[++top]=u;return;}
	int lca=LCA(u,stk[top]);
	if(lca==stk[top]){stk[++top]=u;return;}
	while(top>1&&dep[lca]<=dep[stk[top-1]]){
		add(stk[top-1],stk[top]);
		--top;
	}
	if(lca!=stk[top])add(lca,stk[top]),stk[top]=lca;
	stk[++top]=u;
}

例题

[SDOI2011]消耗战

标签:dep,top,虚树,LCA,stk,询问
来源: https://www.cnblogs.com/VCLS01/p/15053875.html