
数据结构—优先队列
文章平均质量分 74
Ezereal
这个作者很懒,什么都没留下…
展开
-
POJ 2431 Expedition
题目大意:有n个加油站,每个加油站的加油的油量有限,距离终点都有一个距离。一个卡车的油箱无限,没走一个单元要消耗一单元的油,问卡车到达终点的最少加多少次油。题解:可以认为,在到达加油站时,就获得一次在之后任何时候都可以加Bi单位汽油的权利。由此,可以利用优先队列,放置经过的加油站可加的Bi单位汽油,需要时取出队头元素即可完成贪心贴一份别人的代码。。。原创 2015-08-15 16:47:01 · 432 阅读 · 0 评论 -
Codeforces 691D. Swaps in Permutation (并查集 + 优先队列)
简单题意给出一个序列,然后给出序列中可交换的位置,可以交换无限次,求最终结果中字典序最大的那一个。思路可以认为可交换位置的坐标之间是连通的,在同一个连通块之中排从大到小调整位置,把所有的连通块都调整完了以后,就是最终的解。这里用一个并查集来维护坐标之间的连通关系,然后用优先队列在父亲节点上保存所有的坐标,输出的时候只要从对应的父亲节点取出最大值即可。#inc原创 2016-10-10 09:31:17 · 327 阅读 · 0 评论 -
2016 ACM/ICPC Asia Regional Qingdao Online hdu 5884 Sort (二分+优先队列)★
题意:给定n个序列,以及他们的长度,问在总花费不超过T,每次合并的序列个数不多于k的情况下,k的最小值,合并的代价是合并序列的总长度和。题解:二分k,再用优先队列取出前k个小的,模拟下去,不过这样会T。由于ai小于1000,所以可以记录这1000个数出现的次数,将出现的数字压入队列,每次出队的时候判断一下就不T了。不过还有一个问题,比如长度为6的序列,每次取前3个,最后一次只会取最后两原创 2016-09-17 18:54:03 · 502 阅读 · 0 评论 -
【VK Cup 2016 - Round 1 (Div 2 Edition)E Bear and Contribution(目标平行线差值相减) ★ ★
【题意】有n(2e5)个注册用户,每个人的贡献为t[i](±1e9范围)我们可以花费b的时间成本,使得一个人的贡献+5同样可以划分c的时间成本,使得一个人的贡献+1问你至少需要花费的时间,使得至少k(2b,c∈[1,1000](可能存在b【分析】想法一:首先,有一点可以明确的是,答案肯定在{某个人的贡献+0,+1,+2,+3,+4}的集合中。于是转载 2016-09-14 19:42:57 · 737 阅读 · 0 评论 -
2016 大连网络赛 & hdu5875 (优先队列+离线)★
题意:给你一个区间,求a_l%a_(l+1)%a_(l+2)%…%a_r 的值分析:因为一个数连续模一个比他模数小的数不会模超过30次,所以预处理记录下每个位置的30次变化,离线输出就可。具体做法就是优先队列保存一个结构体,里面记录模数以及原始位置,On扫一遍,对于每个位置,队首元素模数大于该位置数时,一直弹出,并压入更新后的模数及位置,同时记录下相关信息。#include原创 2016-09-11 19:31:41 · 892 阅读 · 0 评论 -
POJ 3635 Full Tank? (dp)
题意:给出一张图,n网上大部分的思路都是类似于dij的那种扩展。首先定义一个二维数组dp。 dp[i][j] 表示走到i点剩余j个单位的汽油时的最小花费然后维护一个优先队列。 每次有两种可扩展的状态,一是加一个单位的油,二是走向邻接点,然后不断的将状态加入优先队列中好坑啊,忘记优先队列是倒序的,T到死啊#include #include #include #原创 2016-08-07 10:51:26 · 386 阅读 · 0 评论 -
hdu 1242 Resuce
题意:X代表卫兵,a代表终点,r代表起始点,.代表路,#代表墙路花费一秒,x花费两秒问到达终点的最少时间思路:BFS+优先队列的果题#include #include #include #include #include #include #include #include #include #include using namespace st原创 2015-10-14 19:32:59 · 332 阅读 · 0 评论 -
hdu 1113 Word Amalgamation
题意:第一个XXXXXX前面的是字典,之后的是查询的关键词语,目标是找到字典中与其相同字母构成的字符串。题解:不得不说,大神就是大神。。。。#include #include #include #include using namespace std;map str;string s, t;int main(){ while(cin >> s && s != "XXX原创 2015-09-11 18:44:43 · 491 阅读 · 0 评论 -
POJ 3190 Stall Reservations
题意:一些奶牛要在指定的时间内挤牛奶,而一个机器只能同时对一个奶牛工作。给你每头奶牛的指定时间的区间,问你最小需要多少机器。题解:感觉是道经典题,遇到很多遍都好像是弃了。。。。 只能借鉴别人思路了。。。。维护一个优先队列,里面以已经开始挤奶的奶牛的结束时间早为优先,然后每次只需要检查当前是否有奶牛的挤奶工作已经完成的机器即可,若有,则换那台机器进行工作。若没有,则加一台新的机器。原创 2015-08-19 14:10:02 · 420 阅读 · 0 评论 -
hdu 3673 David Shopping (优先队列)
题目大意:给定口袋大小m,及一个大小为n的礼品序列,当新礼品加入时,如果相同礼品在口袋中,则该礼品的“平凡程度”+1,如果无相同礼品且有多余空间,则放入,如果无多余空间,则把平凡程度最大的礼物舍弃。若有相同,优先舍弃最早放入口袋中的礼品。求丢了多少次礼品解析:优先队列处理 注意一些细节#include #include #include #include #include原创 2016-10-15 17:37:35 · 516 阅读 · 0 评论