文章

2

粉丝

127

获赞

2

访问

31.1k

头像
哈夫曼编码问题
推荐阅读
数据结构
发布于2021年8月6日 14:42
阅读数 14.1k

使用优先队列解决(所有叶结点的值与权值(到根的路径长度)的乘积之和=非叶子节点之和)

升序队列,小顶堆:priority_queue <int,vector<int>,greater<int> > q;

降序队列,大顶堆:priority_queue <int,vector<int>,less<int> >q;
#include <bits/stdc++.h>

using namespace std;

int main(){
    int n;
    while(cin >> n){
        priority_queue<int, vector<int>, greater<int> > q;
        for(int i = 0 ; i < n; i++){
            int x;
            cin >> x;
            q.push(x);
        }
        int a,b,ans=0;
        while(q.size()!=1){
            a = q.top();
            q.pop();
            b = q.top();
            q.pop();
            a = a+b;
            ans += a;
            q.push(a);
        }
        cout << ans << endl;
    }
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发