堆
文章平均质量分 54
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
【openjudge】集合问题
描述有一组正整数,总数不超过1000,其中最大值记为M。现要将它们划分成N个集合,使得每个集合的元素之和与M的差的绝对值的和最小。集合A中当前各元素之和记为SUM(A),称为A的负荷;SUM(A)与M之差的绝对值称为A的负荷与理想负荷的偏差,简称为A的偏差。把这些整数划分成N个集合的方法是:按照从大到小的顺序,依次为每个整数分别选择一个集合;确定一个整数所属集合时,先计算各集合的负荷,原创 2015-12-08 19:40:12 · 1348 阅读 · 0 评论 -
[BZOJ1029][JSOI2007]建筑抢修(贪心+堆)
题目描述传送门题目大意:修复每一个建筑都需要一定的时间,如果某一个建筑不能在某一个时刻前被修复就永不能被修复了,问最多能修复多少个建筑题解按照最晚的时刻排序,然后对于一个建筑,如果能修就修,否则让其替换前面一个耗时最长的建筑 和工作安排那道题有点像代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>原创 2017-05-03 18:49:47 · 1089 阅读 · 0 评论 -
[BZOJ1555][HN集训2008]KD之死(贪心+堆)
题目描述传送门题解首先考虑没有车、只有两个物品ab的情况 若a放在b上面,那么这个东西的承重量为bt-aw 反之承重量为at-bw 显然若bt-aw>at-bw,即at+aw<<bt-bw的话,a放在b上是更优的我们把车当做一个必选的物品,并且从上到下选,这样每次只需要考虑新放入的物品的承重量和之前放入的所有物品的重量和 那么应该先按照w+t排序 如果当前的物品为必选的,那么一定要选,如果原创 2017-03-17 18:41:52 · 736 阅读 · 0 评论 -
[BZOJ3784]树上的路径(点分治+dfs序+st表+堆)
题目描述传送门题解这道题并不是像普通的点分一样现在根上加然后在儿子上把不合法的减去,而是直接只能查询合法的,这种思维定式要改一改了。。。 刚开始一直在往这方面考虑。。直到看到有人说这道题和超级钢琴那道题很像才受到启发yy出这种不靠谱的的做法。。。首先从当前根出发到每一个点都求出了一条路径,那么怎么组合是合法的呢?就是路径的两个端点不能在根的同一个儿子里 是否在同一个儿子里可以用dfs序来区分,那原创 2017-02-15 23:50:42 · 741 阅读 · 0 评论 -
[BZOJ3053]The Closest M Points(kd-tree+堆)
题目描述传送门题解比较裸的kd-tree 每一次询问维护一个大小为m的优先队列(大根堆),查询的时候和堆顶比较 最后堆中的元素就是答案代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#de原创 2017-02-10 16:46:18 · 790 阅读 · 0 评论 -
[BZOJ2626]JZPFAR(kd-tree+堆)
题目描述传送门题解注意这里是最远的k个点 和BZOJ3053差不多,多了一个限制,就是编号要尽量大 就把维护的堆改一下就行了代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;#define原创 2017-02-10 16:48:40 · 795 阅读 · 0 评论 -
[BZOJ4520][Cqoi2016]K远点对(kd-tree+堆)
题目描述传送门题解枚举每一个点,求前k大用一个小根堆维护一下就行了 kd-tree查询的时候一对点会算两次,所以求前2k大 刚开始手残T死了mdzz…代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>#include<vector>原创 2017-02-17 10:18:32 · 574 阅读 · 0 评论 -
[BZOJ2936][POI1999] 降水(堆+bfs:floodfill)
题目描述传送门题解传说这种积水问题有个学名叫floodfill?首先可以发现最外围的一坨块上是不可能积水的。而这些块里面积水的高度取决于高度最小的那个块——木桶效应! 由此可以猜测:块的高度,也可以说是已经确定了能积多少水的积水高度,就是整个算法的关键。 设a(i,j)表示每一个块的原始高度,h(i,j)表示这个块最多积水后的高度。 我们首先在已经确定h(i,j)的块(也就是最外围的块)中选出原创 2016-10-26 21:58:55 · 1211 阅读 · 0 评论 -
[NOIP2015][Vijos1977]推销员(heap)
题目描述传送门题解感觉vijos上的数据比较强,Po的代码在别的网站上过了但是在这里总是wa一组。最后好像是因为一个奇怪的边界问题。 分析题目我们可以发现,假设说推销i个人的时候最远走到了第x个点,那么推销i+1个人的时候就有两种选择:在1~x-1这些点中选一个权值的点,或者在x+1~n这些点中选一个权值+多出来的路程最大的点。这两个选择中选比较大的那个。如果相等的话,选的点越靠后越好一定是更优的原创 2016-10-29 07:30:24 · 803 阅读 · 0 评论 -
[NOIP2001][vijos1119]Car的旅行路线(dijkstra堆优化)
题目描述传送门题解这道题其实就是个最短路裸题,但是繁琐的预处理让其恶心无比。。。 首先我们需要预处理出每一个矩形四个顶点的坐标。读入给出了任意三个坐标,两两距离最长的那两个一定是对角线。那么可以用中点公式算出矩形中心的坐标,然后再计算出剩下的一个顶点的坐标。 然后根据题目描述将每一个点编号然后连边跑最短路就可以了。由于点数很少,边数较多,跑floyed和dijkstra要比spfa优(虽然好像实原创 2016-11-08 20:47:44 · 1233 阅读 · 0 评论 -
[BZOJ2006][NOI2010]超级钢琴(st表+heap)
题目描述传送门题解首先考虑如果k=1的时候如何来做。当k=1时,也就是只选出来一个最大值就可以了,我们可以枚举区间的起点,每一个起点对应的一个区间长度合法的区间,从这段区间里找出来一个前缀和最大的然后减去起点的就可以了。 但是如果k>1的话,我们不能只找一个最大的。那么可以考虑维护一个大根堆,每次弹出堆中最大的元素来,弹k次。还是像k=1时那样,每次找出来一个最大值,然后压到堆里。每次从堆中弹出一原创 2016-11-08 08:27:07 · 646 阅读 · 0 评论 -
[vijos1897]学姐吃牛排(dfs+heap+bst)
Sometimes, suddenly found a lot of people life indispensable, walked on the loose.原创 2016-09-22 20:29:01 · 853 阅读 · 0 评论 -
[BZOJ2151]种树(贪心+堆)
在所有别人能给你造成的伤害中,破坏性最强、后果持续最久的一种,是让你怀疑自己配不上拥有任何好的事物。原创 2016-08-28 17:03:11 · 1252 阅读 · 1 评论 -
[BZOJ1572][Usaco2009 Open]工作安排Job(贪心+堆)
题目描述传送门题目大意:每一个工作在di之前完成会有pi的收益,每一个时间只能完成一项工作,给出n个工作问最大收益。题解将di排序,然后维护一个pi的堆,每一次贪心地选择最大的代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using原创 2017-04-26 18:59:07 · 1000 阅读 · 0 评论