poj 3253 哈夫曼树 经典 运用了优先队列 总和最少

其中巧妙的运用了优先队列,将哈夫曼树的精髓给表达了出来

需要注意的是其中的优先队列的定义,一定要有自定义比较

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

using namespace std;

struct node
{
	__int64 value;
	bool operator <(const node &a)const
	{
		return value>a.value;
	}
}temper;

int main()
{
	priority_queue<node> qu;
	int i,n;

	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&temper.value);
		qu.push(temper);
	}

	__int64 ans=0;

	while(qu.size()>1)
	{
		int a,b;

		a=qu.top().value;
		qu.pop();

		b=qu.top().value;
		qu.pop();

		temper.value=a+b;
		qu.push(temper);

		ans+=a+b;
	}

	printf("%I64d\n",ans);

	return 0;
}

  

posted @ 2012-04-06 11:26  shijiwomen  阅读(211)  评论(0编辑  收藏  举报