题目大意:给定一棵树,选定一棵子树中的一些点,薪水和不能超过m,求点的数量*子树根节点的领导能力的最大值
考虑对于每个节点,我们维护一种数据结构,在其中贪心寻找薪金小的雇佣。
每个节点暴力重建一定不行,我们考虑可并数据结构,每个节点将子节点的信息直接合并即可
可以用启发式合并的Treap,也可以用可并堆
今天特意去学了这玩应0.0 先写了左偏树 然后又写了下随机堆…… 后者速度上更快一些 ...
现学的左偏树。。。这可是道可并堆的好题目。首先我们考虑z不减的情况:我们发现对于一个区间[l, r],里面是递增的,则对于此区间最优解为z[i] = t[i];如果里面是递减的,z[l] = z[l + 1] = ... = z[r] = 这段数的中位数,不妨叫做w。(此处我们定义中位数为第(r -...
分类:
其他好文 时间:
2014-10-18 22:18:42
阅读次数:
283
题意:
n堆数字 m个操作 操作是两个人轮流执行 有5种操作 T操作拿一堆数字 C操作两个人比较自己手中最大的数字胜者得到对方的数字 L操作扔掉最大数字 A操作使最大数字加上一个值 E操作是最大数字改变值 两个人按上述规则进行R轮游戏 问每局游戏的比分和最后谁赢
思路:
要么是合并一堆数字 要么从一堆数字里拿最大 很明显这时可并堆的操作 想到使用左偏树...
分类:
其他好文 时间:
2014-07-19 23:21:09
阅读次数:
391
提交地址:点击打开链接
题意: N(N
分析:涉及集合的查询,合并,取最值。 利用并查集和左偏树即可解决。
#include
#include
#include
#include
using namespace std;
const int maxn = 200000;
int tot, v[maxn], l[maxn], r[maxn], d[maxn], f[...
分类:
其他好文 时间:
2014-07-13 15:38:55
阅读次数:
183
[可并堆与左偏树]我们最常用的二叉堆,是最常用的优先队列,它可以在O(logN)内实现插入和删除最小值操作。但是对于合并两个有序的优先队列,二叉堆就显得力不从心了。左偏树是一种可并堆(MergeableHeap),意思是可以在O(logN)时间内完成两个堆的合并操作。左偏树(LeftistTree)...
分类:
其他好文 时间:
2014-05-12 00:51:29
阅读次数:
292