优先队列和堆
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
数据结构-堆
堆最重要的性质就是儿子的值一定不小于父亲的值。除此之外,树的节点是按从上到下、从左到右的顺序紧凑排列的。 在向堆中插入数值时,首先在堆的末尾插入该数值,然后不断向上提升直到没有大小颠倒为止。 从堆中删除最小值时,首先把堆的最后一个节点的数值复制到根节点上,并且删除最后一个节点。然后不断向下交换直到没有大小颠倒为止。在向下交换的过程中,如果有2个儿子,那么选择数值较小的儿子(如果儿子比自己小的话原创 2016-04-08 17:39:11 · 249 阅读 · 0 评论 -
UVa11292-Dragon of Loowater
用两个优先队列维护龙头的直径和骑士的高度,不断从队列中抛出元素,第一个满足条件的即为最小的。#include <cstdio> #include <queue>using namespace std;int main(int argc, char const *argv[]) { int n, m; while (scanf("%d%d", &n, &m) == 2 && n + m原创 2016-09-18 22:48:01 · 310 阅读 · 0 评论 -
POJ1862-Stripies
这题是基本不等式啊,每次选取质量m最大的两个stripy进行碰撞结合,能够得到最小的质量。 所有只要维护一个优先队列就可以了。 #include #include #include using namespace std; priority_queue que; int main() { int n; scanf("%d", &n); for原创 2016-04-21 10:51:42 · 602 阅读 · 0 评论 -
POJ2431-Expedition
卡车在经过加油站之后需要加油时,可视为在之前经过的加油站加的油。 在卡车没油的时候用优先队列提取出先前经过的加油站中油量最多的。 #include #include #include #include using namespace std; const int MAXN = 10000; typedef pair fuel; priority_queue que; fuel st原创 2016-04-12 13:33:01 · 382 阅读 · 0 评论 -
POJ3614-Sunscreen
每一种防晒霜可以给多个牛使用,这时候该如何决策呢? 维护一个优先队列,按maxSPF从小到大的顺序排列。这是为了尽量把SPF小的防晒霜给maxSPF小的牛。 首先将牛和防晒霜进行排序,然后按防晒霜的SPF从小到大分配给可用的牛。 #include #include #include #include using namespace std; typedef pair P;原创 2016-04-21 18:35:29 · 531 阅读 · 0 评论 -
POJ3253-Fence Repair
将题目想成一棵二叉树,一块木板为父节点,切割后的两段长度为它的子节点。 如此切割的开销为父节点木板对应的长度。 总开销为所有含有子节点的父节点对应长度只和。 等于这棵树的各叶节点乘以节点的深度。 因此最短的板应是深度最大的叶子节点之一。 最短的板与次短的板的节点是兄弟节点。 将l按大小顺序排序,最短的板l1和次短的板l2是由长度为(l1+l2)的板得到的。 递归地将这n-1块木板的问原创 2016-03-31 16:00:06 · 402 阅读 · 0 评论 -
POJ2010-Moo University - Financial Aid
将每个学生先按照分数排序,再以每个学生作为中间点,在优先队列的帮助下分别找到在比这名学生前面和后面援助金额之和最少的(n-1)/2名学生,在数组lower和upper中记录金额。 总金额为该学生的援助金与他前后n-1个学生的援助金之和。 遍历所有解的时候需要从大往小遍历(元素越多,固定为n个元素之和才有可能越小),第一个满足总金额小于等于基金的即为最优解。 #include #includ原创 2016-04-25 18:11:26 · 331 阅读 · 0 评论 -
Ural1306-Sequence Median
有n个数,求这n个数排序后的中间数,如果n为奇数,中间数即为排序后中间那个元素,如果n为偶数就是中间两个元素的平均数。由于内存只有1M,所以无法存下所有数值进行排序,因此,考虑将n/2+1个元素放入一个优先队列(堆)中,然后每次将剩下的元素逐个放进优先队列中并抛出堆中最大的元素。 这样以后如果n为奇数,队首元素即为中间数;如果是偶数,那么先记录队首元素,再抛出队首元素,原队首与当前队首元素之和除以原创 2016-11-18 20:35:13 · 340 阅读 · 0 评论