优先队列:priority_queue<Type, Container, Functional>
Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。
Container 必须是用数组实现的容器,比如 vector, deque 但不能用 list.
STL里面默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个
参数缺省的话,优先队列就是大顶堆,队头元素最大。
而在求哈夫曼树中,我
们恰恰需要取得堆中最小的元素,于是我们使用如下语句定义一个小顶堆:
priority_queue<int , vector<int> , greater<int> > Q;
关于堆的有关操作如下:
Q.push(x);
将元素 x 放入堆 Q 中。
int a = Q.top();
取出堆顶元素,即最小的元素保存在 a 中。
Q.pop();
弹出堆顶元素,取出后堆会自动调整为一个新的小顶堆。
它的定义与之前我们使用过的队列一样在标准模板库 queue 中,所以在使用
它之前我们必须做相应预处理。
#include <queue>
30.哈夫曼树(九度)
1 30.哈夫曼树 2 时间限制:1 秒 3 内存限制:32 兆 4 特殊判题:否 5 题目描述: 6 哈夫曼树,第一行输入一个数 n,表示叶结点的个数。需要用这些叶结点生 7 成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即 weight,题目需要输出 8 所有结点的值与权值的乘积之和。 9 输入: 10 输入有多组数据。 11 每组第一行输入一个数 n,接着输入 n 个叶节点(叶节点权值不超过 100, 12 2<=n<=1000)。 13 输出: 14 输出权值。 15 样例输入: 16 5 17 1 2 2 5 9 18 样例输出: 19 37