题解 | #哈夫曼树#

哈夫曼树

http://www.nowcoder.com/questionTerminal/162753046d5f47c7aac01a5b2fcda155

#include "cstdio"
#include "queue"
using namespace std;
int main(){
    priority_queue<int> pqueue;//存入相反数
    int n;
    scanf("%d",&n);
    for (int i = 0; i < n; ++i) {
        int leaf;
        scanf("%d",&leaf);
        pqueue.push(-leaf);

    }
    int res=0;
    while (pqueue.size()>1){
        int leaf1 = pqueue.top();
        pqueue.pop();
        int leaf2 = pqueue.top();
        pqueue.pop();
        //计算带权路径和
        res = res + leaf1+leaf2;
        //把构成的新子树插入原集合;
        pqueue.push(leaf1+leaf2);

    }
    printf("%d\n",-res);
}
全部评论

相关推荐

后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务