题解 | #哈夫曼树#

哈夫曼树

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

#include<iostream>
#include<cstdio>
#include<queue>

using namespace std;


int main() {
	int n;
	while(scanf("%d",&n) != EOF) {
		//优先队列默认是采用的是大根堆,而哈夫曼树一次选择的是权值较小的两个点,因此需要重新定义优先队列
		priority_queue<int,vector<int>,greater<int>> myPriorityQueue;
		while(n--) {
			int weight;
			scanf("%d",&weight);
			myPriorityQueue.push(weight);
		}
		int wpl = 0;
		while(myPriorityQueue.size() > 1) {
			int a = myPriorityQueue.top();
			myPriorityQueue.pop();
			int b = myPriorityQueue.top();
			myPriorityQueue.pop();
			myPriorityQueue.push(a + b);
			wpl += (a + b);
		}
		printf("%d\n",wpl);
	}
	return 0;
}
全部评论

相关推荐

求求要我吧:你教育经历放在下面干什么,而且27届还是28届啊()另外看你简历有两面,通常来说投递运营岗位一面简历就够了。另外个人总结要写也放在简历最下面,然后你奖项那里是2019年的哇哈哈,那你究竟投递的是社招还是实习?实习的话你是第几届是肯定要写出来的,社招的话你这个工作经历又太短太花了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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