优先队列: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
View Code

相关文章:

  • 2021-07-05
  • 2021-07-22
  • 2021-12-08
  • 2022-12-23
  • 2022-01-04
  • 2021-12-10
  • 2021-09-01
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-28
  • 2022-12-23
  • 2022-12-23
  • 2021-07-14
  • 2021-10-08
相关资源
相似解决方案