哈夫曼树的应用

堆相关的操作:

Priority_queue Q;(默认构造大顶堆)

Priority_queue,greater> Q;

堆相关的操作:

将元素x放入堆Q中Q.push(x);

取出堆顶元素int a=Q.top();取出堆顶元素,即最小的元素保存在a中。

注:使用堆之前需要引入标准模板库#include

#include
#include
#include
#include
using namespace std;
priority_queue,greater > 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;
            cin>>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",ans);
    }
    return 0;
}

你可能感兴趣的:(算法)