最小堆的维护,POJ(2051)
题目链接:http://poj.org/problem?id=2051

///维持最小堆(优先队列)POJ2051
#include <iostream>
#include <string> using namespace std; struct Node {
int Now; ///出堆的时间
int id;
int p; ///时间间隔
}; Node node [];
int K; ///输出个数 void down (Node H[],int s,int m) {
///向下调整,s是要调整的编号,m是堆的size
Node rc=H[s];
for(int j=s*; j<=m; j*=) {
if(j<m) {
if(H[j].Now>H[j+].Now) { ///两个子节点中找到那个较小者
j++;
} else {
///如果相等,比较ID
if(H[j].Now==H[j+].Now&&(H[j].id>H[j+].id))
j++;
}
}
if(rc.Now<H[j].Now||(rc.Now==H[j].Now&&rc.id<H[j].id))
break;
H[s]=H[j]; ///更新子节点
s=j;
}
H[s]=rc; ///最后交换的子节点换上rc
} ///建立一个最小堆
void MakeMinHeap(Node H[],int length) {
for(int i=length/; i>; --i)
down(H,i,length);
} int main() {
string str;
int i=;
cin>>str;
while(str.compare("#")!=) {
cin>>node[i].id>>node[i].p;
node[i].Now=node[i].p;
i++;
cin>>str;
}
int len=i-;
cin>>K;
MakeMinHeap(node,len);
for(int i=; i<=K; i++) {
cout<<node[].id<<endl;
node[].Now+=node[].p;
down(node,,len); ///修改顶点后再次调整最小堆
}
return ;
}
最小堆的维护,POJ(2051)的更多相关文章
- 算法手记 之 数据结构(堆)(POJ 2051)
一篇读书笔记 书籍简评:<ACM/ICPC 算法训练教程>这本书是余立功主编的,代码来自南京理工大学ACM集训队代码库,所以小编看过之后发现确实很实用,适合集训的时候刷题啊~~,当时是听了 ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 1001 - Buy and Resell 【优先队列维护最小堆+贪心】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438 Buy and Resell Time Limit: 2000/1000 MS (Java/O ...
- 使用最小堆来完成k路归并 6.5-8
感谢:http://blog.csdn.net/mishifangxiangdefeng/article/details/7668486 声明:供自己学习之便而收集整理 题目:请给出一个时间为O(nl ...
- ZOJ 2724 Windows Message Queue (优先级队列,水题,自己动手写了个最小堆)
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...
- Libevent源码分析(一):最小堆
Libevent中的timeout事件是使用最小堆来管理维护的.代码位于<minheap-internal.h>. 看函数命名和代码风格应该是一个C++程序员,函数名都挺好懂的,只是下面这 ...
- 多线程外排序解决大数据排序问题2(最小堆并行k路归并)
转自:AIfred 事实证明外排序的效率主要依赖于磁盘,归并阶段采用K路归并可以显著减少IO量,最小堆并行k路归并,效率倍增. 二路归并的思路会导致非常多冗余的磁盘访问,两组两组合并确定的是当前的相对 ...
- HDUOJ----4006The kth great number(最小堆...)
The kth great number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Oth ...
- Java最小堆解决TopK问题
TopK问题是指从大量数据(源数据)中获取最大(或最小)的K个数据. TopK问题是个很常见的问题:例如学校要从全校学生中找到成绩最高的500名学生,再例如某搜索引擎要统计每天的100条搜索次数最多的 ...
- 最小堆的两种实现及其STL代码
#include<cstdio> #include<iostream> #include<algorithm> #include<vector> boo ...
随机推荐
- python3 sorted()函数笔记
import randoma=[]for i in range(9): b=random.randint(0,9)#生产9个随机数 a.append(b)#把生成的随机数添加到列表里面print(so ...
- Dev Express Report 学习总结(六)Dev Express Reports自定义Summary
在我们使用DevExpress开发报表的过程中,对于页面中复杂的数据合计,我们可能会使用到自定义Summary.下面通过一个例子来进行说明: 首先,我建立了如上图所示的报表页面,其中的数据源来自cla ...
- UGUI 用脚本动态改变Button颜色组合
public Button button; void Start() { ColorBlock cb = new ColorBlock(); cb.normalColor = Color.red; c ...
- Unity Animation动画倒播
- [转]Jquery Mobile dialog的生命周期
本文转自:http://www.cnblogs.com/jackhuclan/archive/2012/04/05/2432972.html JQuery Mobile对htm5的移动开发绝对是个好用 ...
- iscroll.js文档
iScroll是高性能的.小尺寸的.无依赖关系的.支持多平台的滑动JavaScript库. 当然,不只是scroll,还有滚动.缩放.平移.无限滚动.视差滚动等. 为了达到更好的新能,所以iScrol ...
- zookeeper开源客户端curator
zookeeper的原生api相对来说比较繁琐,比如:对节点添加监听事件,当监听触发后,我们需要再次手动添加监听,否则监听只生效一次:再比如,断线重连也需要我们手动代码来判断处理等等.对于curato ...
- nginx+keepalived主辅切换(监控脚本在keepalived.conf中执行)
以前写过一篇,nginx+keepalived 双机互备的文章,写那篇文章的时候没有想过如果apache或者nginx 挂了,而 keepalived 或者 机器没有死,那么主辅是不会切换的,今天就研 ...
- php关于网页乱码问题
指定浏览器打开网页的编码格式: <meta http-equiv="Content-Type" content="text/html; charset=gb2312 ...
- php 可逆的加密算法
代码: <?php class Test { private $authCodeKey = 'khUvFB9pijNyCYMGZdzqeKalyg7dh'; function authCode( ...