建立一个保存元素为int的堆Q,这样的堆默认为大顶堆(堆顶取得的元素是整个堆最大的元素)
priority_queue<int> Q;
可以通过如下语句定义一个小顶堆:
priority_queue<int,vector<int>,greater<int>> Q;
将元素x放入堆Q中。
Q.push(x);
取出栈顶元素,即最小的元素保存到a中:
Q.pop();
标准模板库queue和相应的预处理如下:
#include<queue>
using namespace std;
例3.3 哈夫曼树
代码3.3
#include<iostream>
#include<queue>
using namespace std;
priority_queue <int,vector<int>,greater<int> > Q;
int main(){
int n,i,x,a,b,ans;
while(cin >> n){
ans = 0;
while(!Q.empty())
Q.pop();
for(i=0;i<n;i++){
cin >> x;
Q.push(x);
}
while(Q.size()>=2){
a = Q.top();
Q.pop();
b = Q.top();
Q.pop();
ans += a + b;
Q.push(a + b);
}
cout << ans << endl;
}
return 0;
}
搬水果
#include<iostream>
#include<queue>
using namespace std;
priority_queue <int,vector<int>,greater<int> > Q;
int main(){
int n,i,x,a,b,ans;
while(cin >> n){
ans = 0;
while(!Q.empty())
Q.pop();
for(i=0;i<n;i++){
cin >> x;
Q.push(x);
}
while(Q.size()>=2){
a = Q.top();
Q.pop();
b = Q.top();
Q.pop();
ans += a + b;
Q.push(a + b);
}
cout << ans << endl;
}
return 0;
}