文章

14

粉丝

230

获赞

26

访问

70.4k

头像
利用优先队列解决哈夫曼树题目
P1544 中南大学机试题
发布于2022年8月6日 14:58
阅读数 5.6k

总体思路:

对于给出的一系列结点,先将权值更小的两个结点合并,并将新结点加入原系列,直到原系列只剩下一个结点

实现方法:

利用优先队列(升序),取队首和次对首合并,加入队列,直到队列只有一个元素。

带注释代码

#include<bits/stdc++.h>

using namespace std;

int main()
{
    int num;
    cin>>num;
    priority_queue<int,vector<int>,greater<int>> q; //升序排列
    int a;
    int ans=0;
    while(num--){
        cin>>a;
        q.push(a);

    }
    while(q.size()>1){
       int t1= q.top(); //队首
        q.pop();
       int t2= q.top(); //次队首
        q.pop();
        int t3=t1+t2;  //相加的和重新入队
        ans+=t3;       //体力耗费值累加
        q.push(t3);
    }
    cout<<ans<<endl;
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发