[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\)有关,子树可以直接线段树合并

posted @ 2020-06-08 15:01  Grice  阅读(111)  评论(0编辑  收藏  举报