最小堆的维护,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 ...
随机推荐
- C++: int int& int * int**的区别、联系和用途
1.int; int是C++关键字,表示整型,其大小是32位有符号整型,表示的范围是-2,147,483,648 到 2,147,483,647:在声明和定义变量时使用,它表示的意思是所声明或所定义的 ...
- Autel MaxiSYS Pro Diagnostic System
The Autel Maxisys Pro Diagnostic System is a complete OEM-level diagnostic system that enables the s ...
- 记录CentOS7.X版本下安装MySQL5.7数据库
记录CentOS7.X版本下安装MySQL5.7数据库 设置rpm下载目录在/opt目录下新建一个目录存放mysql cd /opt sudo mkdir mysql12 下载MySQL的源 wg ...
- Murano Weekly Meeting 2015.12.01
Meeting time: 2015.December.1st 1:00~2:00 Chairperson: Nikolay Starodubtsev, from Mirantis Meeting ...
- 虚拟机中Centos7搭建本地仓库
iso放入光驱(虚拟机光驱)后,设备目录是/dev/sr0 表示光驱,被挂载道 /run/media/c4t/CentOS\ 7\ x86_64目录下 [c4t@localhost ~]$ df文件系 ...
- mysql连接查看
1:查看当前连接 mysql> show status like 'Threads%'; +-------------------+-------+ | Variable_name | ...
- ANDROID_HOME is not set and "android" command not in your PATH解决
使用nodejs安装cordova后在项目里面添加平台时出现错误: 原因就是没有配环境变量 使用phonegap开发不仅要配JDK环境变量,还要配ADT环境变量,出现这个错误很显示就是没配ADT环境变 ...
- [Java][Servlet] Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]
Background: Servlet version 3.1(3.0之后就有了@WebServlet注解) Error 严重: Failed to destroy end point associa ...
- 基于nodejs的DNS查询工具
开始这个实例之前,我们简单谈一下Node.js吧,Node.js是一个由JavaScript书写而成的强大Web开发框架,它让开发强壮的.伸缩性良好的服务器端Web应用变得更加简单.容易.这种技术诞生 ...
- IDEA配置 tomcat server