堆模板
来源:互联网 发布:手机淘宝改支付宝绑定 编辑:程序博客网 时间:2024/04/29 04:47
//维持最小堆//调整void down(int p){ int q=p*2; a=heap[p]; while(q<=hlength) { if(q<hlenth&&heap[q]>heap[q+1])//寻找当前子节点中较小的那个 { q++; } if(heap[q]>=a)//若较小的那个较大则结束 break; else { heap[p]=heap[q];//交换位置 p=q; q=p*2; } } heap[p]=a;//安排原来的节点}//删除最小元素,并且返回其值int DelteMin(){ int r=heap[1]; heap[1]=heap[hlength-1];//将最后一个节点赋值给根节点 down(1); return r;}//插入一个元素,先添加到末尾,在向上调整void up(int p){ int q=p/2; a=heap[p]; while(q>=1&&a<heap[q])//当前的节点比父母值小则交换 { heap[p]=heap[q]; p=q; q=p/2; } heap[p]=a;}void insert(int a){ heap[++hlength]=a; up(hlength);}//将x的优先级上升为Pvoid IncreaseKey(int p,int a){ //将p的优先级s上升为a if(heap[p]<a) return ; heap[p]=a; up(p);}//建堆void build(){ for(int i=hlength/2;i>0;i--) down(i);}
poj2051
http://poj.org/problem?id=2051
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{ int now; int perid; int num;};node nodes[10009];int len;void down(int p){ node tt=nodes[p]; int q=p*2; while(q<=len) { if(q<len&&nodes[q].now>nodes[q+1].now ||q<len&&nodes[q].now==nodes[q+1].now&&nodes[q+1].num<nodes[q].num) q++; if(tt.now<nodes[q].now|| tt.now==nodes[q].now&&nodes[q].num>tt.num) break; nodes[p]=nodes[q]; p=q; q=q<<1; } nodes[p]=tt;}void makeTree(){ for(int i=len/2; i>0; i--) down(i);}int main(){ char s[30]; len=0; while(~scanf("%s",s)) { if(strcmp(s,"#")==0) break; len++; scanf("%d%d",&nodes[len].num,&nodes[len].perid); nodes[len].now=nodes[len].perid; } int k; scanf("%d",&k); makeTree(); for(int i=0; i<k; i++) { printf("%d\n",nodes[1].num); nodes[1].now+=nodes[1].perid; down(1); } return 0;}
阅读全文
0 0
- 堆模板
- 堆模板
- 堆模板
- 堆模板
- 堆模板
- [模板]堆
- 【模板】堆
- 堆模板
- 堆模板
- 堆【模板】
- 【ACM模板】堆排序
- 堆排序模板
- C++堆排序模板
- 堆排序【模板】
- 堆排序模板
- 堆排序模板
- c++模板---堆
- C++模板堆排序
- 多线程
- 纯真IP地址库合并
- HBuilder mui入门教程——(1)简介
- HDU-1863- 畅通工程(最小生成树,prim)
- 56 WebGL处理响应上下文丢失
- 堆模板
- java基础—文件操作
- 2017上半年总结
- Java集合系列——Map
- Java知识点收集
- UML学习笔记(一):项目沟通的语言
- spring字符编码常用配置
- 理解AsyncTask的工作原理
- Centos 7.3 Install Piwik 3.0.4