您的位置:首页 > 其它

九度OJ-1172 哈夫曼树

2015-03-17 19:53 253 查看


思路:

priority_queue<int> Q; //定义一个优先队列,默认是大顶堆

priority_queue<int,vector<int>,greater<int>>  Q;//定义一个小顶堆

Q.push(x); //将x放入队列中

int a = Q.top(); //得到队列顶元素,也就是最小的元素

Q.pop(); // 队列顶元素出队列


实现:

#include <iostream>
#include <queue>
using namespace std;
priority_queue<int,vector<int>,greater<int>>  Q;
int main(int argc, char **argv)
{
int n;
while (cin>>n) {
while (Q.empty()==false) {
Q.pop();
}
for (int i=0; i<n; i++) {
int temp;
cin>>temp;
Q.push(temp);
}
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);
}
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: