您的位置:首页 > 其它

题目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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: