题目1172:哈夫曼树
2014-02-22 17:18
218 查看
// 简单的哈夫曼树
#include<stdio.h>
#include<queue> // 默认为大顶堆
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++){
int x;
scanf("%d",&x);
Q.push(x);
}
int ans=0;
while(Q.size()>1){
int a=Q.top(); Q.pop(); // 取出堆中两个最小值并出堆,并把和存入堆中,
int b=Q.top(); Q.pop();
ans+=a+b;
Q.push(a+b);
}
printf("%d\n",ans);
}
return 0;
}
#include<stdio.h>
#include<queue> // 默认为大顶堆
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++){
int x;
scanf("%d",&x);
Q.push(x);
}
int ans=0;
while(Q.size()>1){
int a=Q.top(); Q.pop(); // 取出堆中两个最小值并出堆,并把和存入堆中,
int b=Q.top(); Q.pop();
ans+=a+b;
Q.push(a+b);
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- 题目1172:哈夫曼树(最短路径的和)两种方法解决
- 题目1172:哈夫曼树
- 九度OJ-题目1172:哈夫曼树-10计院上机D
- 九度 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 30-题目1172:哈夫曼树
- 题目1172:哈夫曼树(优先队列的使用)
- 九度oj 题目1172:哈夫曼树(优先队列实现最小堆)
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 九度题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 九度OJ题目1172:哈夫曼树
- 九度OJ题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 题目1172:哈夫曼树
- 【九度OJ】题目1172:哈夫曼树 解题报告