优先队列:
priority_queue<Int> Q; 建立一个int类型的堆Q, 默认为大根堆
priority_queue<int, vector<int>, greater<int> >Q; 定义一个小根堆
Q.push(x); 将元素x放入堆Q中
int a = Q.top(); 取出堆顶元素,即最小的元素保存在a中
Q.pop(); 弹出堆顶元素,取出后堆会自动调整为一个新的小顶堆
#include<queue> 头文件

题目描述:
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。
输入:
输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
输出:
输出权值。
样例输入:
5
1 2 2 5 9
样例输出:
37

解题思路: 回顾一下,哈夫曼构造过程:每次取出权值最小的两个结点,两权值相加为新节点,且为刚才两节点的父节点,同时该新节点放回序列,开始找新的最小的两个权值,不断重复。

#include<bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, greater<int> > Q;//建立一个小顶堆 int main(){int n;while(scanf("%d", &n)!=EOF){while(Q.empty()==false) Q.pop();for(int i=1; i<=n; i++){//输入n个叶子结点权值 int x;scanf("%d", &x);Q.push(x);//将权值放入堆中 }int ans = 0;//保存答案while(Q.size()>1){//当堆中元素大于1个int a = Q.top();Q.pop();int b = Q.top();Q.pop();//取出堆中两个最小元素,他们为同一个结点的左右儿子,且该双亲结点的权值为它们的和ans += a + b;//该父亲结点必为非叶子结点,故累加其权值Q.push(a+b);//将该双亲结点的权值放回堆中 } cout << ans << endl; //输出答案 } return 0;
}

本题在线测试入口

结束


[C++优先队列模板应用一] 哈夫曼树相关推荐

  1. C++基于优先队列建立链式哈夫曼树并求哈夫曼编码及WPL

    优先队列指针类型自定义排序方法: struct cmp { // 使用仿函数(函数对象)作为Compare双参判断式bool operator()(const HTree &node1, co ...

  2. Vijos P1097 合并果子【哈夫曼树+优先队列】

    描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...

  3. POJ3253 Fence Repair【哈夫曼树+优先队列】

    Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 48026   Accepted: 15784 De ...

  4. SDUT 2127 树-堆结构练习——合并果子之哈夫曼树(优先队列)

    树-堆结构练习--合并果子之哈夫曼树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description ...

  5. 【HDU - 5884】Sort(k叉哈夫曼树,优化tricks,两个队列代替优先队列)

    题干: Recently, Bob has just learnt a naive sorting algorithm: merge sort. Now, Bob receives a task fr ...

  6. 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  7. pta 构造哈夫曼树-有序输入 优先队列做法

    pta 构造哈夫曼树-有序输入 优先队列做法 构造哈夫曼树,然后输出它树的中序序列. 从小到大的顺序给出词频(不超过10个),根据词频构造哈夫曼树. 为确保构建的哈夫曼树唯一,本题做如下限定: (1) ...

  8. 哈夫曼树构造(优先队列)

    使用优先队列,从小往大取,构造哈夫曼树. #include <bits/stdc++.h> using namespace std; string a; int ans, t[200]; ...

  9. 哈夫曼树的带权路径长度(C++优先队列实现)

    哈夫曼树 题目描述 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和的最小值. ...

最新文章

  1. jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
  2. MySQL防止库存超卖方法总结
  3. python面试总结
  4. Redis cluster原理
  5. war,jar包是啥
  6. 工欲善其事 必先利其器
  7. 软件实施提升效率的五个工具
  8. 合工大计算机在职研究生好考吗,合肥工业大学在职研究生2019年考研必知
  9. twig php代碼,有没有办法在wordpress的.twig文件中编写php代码?我试图使用.twig模板文件中的表单值发送邮件...
  10. 【Hive】Hive内部表/外部表
  11. Vue-Access-Control:前端用户权限控制解决方案
  12. 嵌入式基础面八股文——死锁与饥饿(4)
  13. Ubuntu安装显卡驱动详细步骤
  14. 快速由WP8升级到WP8.1
  15. HTML 中的 <abbr> 标签与 role 属性
  16. 频繁模式挖掘Frequent Pattern Mining
  17. ES聚合Aggregation---原生(restful)api
  18. 人的思想的成长过程是一个潜意识不断成长并替代思维完成细节工作的过程
  19. 常用的工业相机及SDK
  20. 图片.php,php图片_php 图片处理类

热门文章

  1. 【题解】SCOI2009围豆豆
  2. 封装微信分享到朋友/朋友圈js
  3. spring-test测试demo
  4. java去除字符串中的特定字符
  5. js控制ul的显示隐藏,对象的有效范围
  6. 组态王和modbus协议
  7. 防暴力破解一些安全机制
  8. js的if(!myFunction())有何用
  9. 软件设计师07-程序语言基础知识
  10. go解析多个html,解析html-Go语言中文社区