[APIO2012]派遣 枚举所有忍者在哪棵子树内, 答案即为本子树内最多派遣的忍者数乘上子树根在原树中祖先最强的领导力, dfs用可并堆合并两棵子树即可, 这道题用不着用并查集维护连通性 ...
「APIO2012」派遣 "传送门" 当预算超过限制时,优先丢掉薪水高的忍者(左偏树维护一下),然后答案取合法答案的最大值。 参考代码: ...
因为限制了编号,所以直接逆序就是自底而上,然后就是树形DP合并节点了,然后用可并堆贪心的删除节点,每次更新节点答案 ...
题面 Bzoj2809 解析 按照贪心策略我们想选尽量多的人,所以就会选费用少的人,那么对于每个节点可以建一棵值域线段树,父亲的线段树由他的所有儿子的线段树合并再单点修改而来,这样就可以快速查询有多少个数满足要求, 线段树上维护人数以及费用和, 考虑到值域有1e9, 而人数只有1e5,我们考虑离散化 ...
「Luogu1552」[APIO2012]派遣 最近状态都不是很好,写完这个题感觉手感好像恢复了一些 "problem" Solution 这个数据范围显然树形DP是做不了的 我们考虑,在预算范围内,选中的忍者越多越好,那么我们在一棵子树中选中的忍者一定是薪水最少的若干个 对每个节点维护一个大根堆, ...
"题目链接 Click Here" 这个题好像大多数人用的都是左偏树啊?这里我来贡献一发主席树的解法。 把题目中的问题抽象出来,其实就是询问每一个点的子树中,工资前$tot_i$大的点,使它们的和满足$\sum cost_i using namespace std; define int long ...
链接 https://www.luogu.org/problemnew/show/P1552 思路 忍者数量肯定越多越好 那就从下到上的合并它的孩子 左偏树的话 顺便维护一个tot,大头堆,如果tot大于了m,把大的删掉 如果左偏树忘干净了或者没学的话 线段树合并也是个不错的选择 直接权值线段树合并 ...
传送门 分析 1.先预处理出不被0覆盖的点,然后对每个点处理出在它左边离他最近的点和在他右边理他最近的点。 2.对于每个至少存在一个忍者的区间,先将它左右边界处理为不被0所覆盖。排序后将包含其他区间的区间去除。 3.贪心求出前i个区间最小忍者数和后i个区间最小忍者数。 4.我们知道对于一个区间除了点 ...
传送门 分析 首先这个题有两个坑点 一是一个点不管可以由父亲领导,任何祖宗均可领导 而是根节点的花费要算在总费用中且它自己也算在总节点数量中 于是我们考虑如何求答案 首先我们知道对于一个点如果在一个子树中就没有选则在更大的一棵子树中一定不会选 因为一棵大的子树有更多选择,结果肯定不会比它的子树劣 于 ...
以m的总价在线段树中找能雇佣的最大人数,然后向上合并 ...