码迷,mamicode.com
首页 > 其他好文 > 详细

《挑战程序设计竞赛》2.4 加工并存储数据的数据结构

时间:2016-07-25 00:03:40      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

这个章节一共介绍了几种数据结构:堆,二叉搜索树,并查集。

第一部分 堆。

堆的实现:

 

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

《挑战程序设计竞赛》2.4 加工并存储数据的数据结构

标签:

原文地址:http://www.cnblogs.com/luosuo10/p/5701767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!