标签:
这个章节一共介绍了几种数据结构:堆,二叉搜索树,并查集。
第一部分 堆。
堆的实现:
int heap[maxn]; void push(int x) { int i = sz;//自己结点的编号 while(i > 0) { int p = (i - 1) / 2; if(heap[p] <= x) break; heap[i] = heap[p]; i = p; } heap[i] = x; } int pop() { int ret = heap[0];//取出优先级最高的元素 int x = heap[--sz];// int i = 0; while(i * 2 + 1 < sz) { int a = i * 2 + 1,b = i * 2 + 2; if(b < sz && heap[b] < heap[a]) a = b; //如果有2个儿子,那么选择数值较小的儿子(儿子比自己小的话)进行交换 if(heap[a] >= x) break;//没有顺序颠倒则退出 heap[i] = heap[a]; i = a; } heap[i] = x; return ret; }
平时我们一般使用stl库中的优先队列来解决问题。
例题:poj 2431 Expedition
poj 3614 Sunscreen
poj 2010 Moo University - Financial Aid
poj 2236 Wireless Network
poj 1703 Find them,Catch them
标签:
原文地址:http://www.cnblogs.com/luosuo10/p/5701767.html