[FJOI2018]领导集团问题
题意
给定带点权树,求最大的集合使得,集合内若两点为祖孙关系,孙子权值$\le $祖先权值
做法一
令\(f_{u,i}\)为\(u\)子树内选择\(i\)个点,最小值最大是多少,转移显然
考虑对每个点维护一个可重集\(S_u\),降序,第\(i\)个点为子树内选择\(i\)个点,最小值的最大可能值
合并两个子树\(S_{k_1},S_{k_2}\),直接合并集合即可
考虑将\(u\)加入所有子树并起来的集合
若原集合为\(\{w_1,w_2,\cdots,w_{m}\}\),\(u\)可以插入\(w_k\)之后,充要条件为\(w_u\le w_k\)
考虑\(u\)插入或不插,若插入插在最优的地方
\(\{w_1,w_2,\cdots,w_{k},w_{k+1},\cdots ,w_m\}\)
\(\{w_1,w_2,\cdots,w_{k},w_u\}\)
我们知道有\(w_{k+1}<w_u\),则最优的情况是将集合替换为
\(\{w_1,w_2,\cdots,w_k,w_u,\cdots,w_m\}\)
直接启发式合并\(O(nlog^2n)\)
做法二
离散化权值
令\(f_{u,i}\)为\(u\)子树内最小值\(\ge i\)时选择的最大点数
用线段树维护差分,由于每次修改之跟\(w_u\)有关,子树可以直接线段树合并