BIT 1020 小白鼠--赫夫曼树(最优二叉树)

http://acm.bit.edu.cn/mod/programming/view.php?a=506

经教主的指导+自己的研究,终于搞懂这道题了。。。

赫夫曼树(最优二叉树)

构造 最优二叉树,求树的带全路径长度


#include<stdio.h>
#include<string.h>
#include<queue>
#include<functional>
using namespace std;

int main()
{
	int i,j,k;
	int t;
	scanf("%d",&t);
	priority_queue<double,vector<double>,greater<double> > q;  //注意和下面的写法,有个空格的区别,这么写就是对的
	//priority_queue<double,vector<double>,greater<double>> q;  这么写就编译不了。。
	while(t--)
	{
		int n;
		while(!q.empty())
			q.pop();
		scanf("%d",&n);
		for(i=0;i<n;i++)
		{
			double temp;
			scanf("%lf",&temp);
			q.push(temp);
		}
		double ans=0;
		while(q.size()!=1)
		{
			double t1,t2;
			t1=q.top(),q.pop();
			t2=q.top(),q.pop();
			ans+=(t1+t2);
			q.push(t1+t2);
		}
		if(n==1)
			printf("%.2lf\n",q.top());
		else
			printf("%.2lf\n",ans);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值