虚树
alan_cty
蒟蒻一只
别打脸(⊙o⊙)哦
展开
-
虚树学习小记
前言有一类问题,形如:给出一棵n个点的树,每次给出k个关键点,求这些关键点之间的一些信息。 保证∑k和n同阶 而对于一次询问是很好用树形Dp之类的方法解决的。 观察到只有关键点有用,我们可以只保留关键点和两两之间的lca,这就是虚树。 显然虚树的大小是O(k)的,只有dfs序相邻的两个点的lca有用 建出虚树后这类问题我们只需要在虚树上Dp就可以了。 但虚树要怎么建立?单调栈我们先把所有原创 2018-04-25 21:13:22 · 263 阅读 · 0 评论 -
虚树模板
Codevec记录所有在虚树中的点,方便删除 add1只需要多开一个lst就可以实现O(k)删除 为了方便默认1号点为根void build() { sort(a+1,a+tot+1,cmp); st[top=1]=1;vec.push_back(1); fo(i,1,tot) { int lca=get_lca(a[i],st[top]);原创 2018-04-25 21:15:10 · 592 阅读 · 0 评论