题目1172:哈夫曼树
来源:互联网 发布:蓝天模具风扇调节软件 编辑:程序博客网 时间:2024/04/27 20:40
- 题目描述:
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。
- 输入:
输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
- 输出:
输出权值。
- 样例输入:
5 1 2 2 5 9
- 样例输出:
37
代码:
#include <stdio.h>#include <queue>#include <vector>using namespace std;priority_queue<int,vector<int>,greater<int> > Q;int main() { int n,i; while(scanf("%d",&n)!=EOF) { while(Q.empty()==false) Q.pop(); for(i = 0; i<n;i++) { int x; scanf("%d",&x); Q.push(x); } int weight = 0; while(Q.size() > 1) { int a = Q.top(); Q.pop(); int b = Q.top(); Q.pop(); int c = a + b; Q.push(c); weight += c; } printf("%d\n",weight); } return 0;}
1.使用堆,可以利用标准库中的优先级队列。包含头文件 #include <queue>
priority_queue<int> Q;建立一个保存元素类型为int的堆Q,默认建的堆为大顶堆。如果需要小顶堆,可以:
priority_queue<int, vector<int>, greater<int> > Q;堆的操作:
Q.push(x): 将x放入堆Q中,自动调整为堆。
int a = Q.pop(): 取出堆顶元素放入a中。
Q.pop(): 弹出堆顶元素,取出后自动调整。
2.计算哈夫曼树的带权路径长度,为所有非叶子节点权值之和。
- (题目30)题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- Jobdu 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 30-题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 九度题目1172:哈夫曼树
- 九度题目1172:哈夫曼树
- 求解:C#.Net 远程方法调用失败 (Exception from HRESULT: 0x800706BE)
- hdoj 1233 还是畅通工程---最小生成树---prime算法
- Python Version 2.7 required which was not found in the registry 问题解决
- 并查集
- HDU 4267 A Simple Problem with Integers
- 题目1172:哈夫曼树
- C语言面试题大汇总之华为面试题
- MySQL 大DML操作建议
- Android Support V7 包中 ActionBar的使用 (1) 添加Action Item
- Silver Cow Party
- 网上看见的一个骑行兄弟的装备,说不定哪天我也出发了
- freopen重定向stdin和stdout之后如何回复正常
- oracle存储过程返回数组给java程序
- Linux下 sudo命令