九度OJ——1172哈夫曼树

来源:互联网 发布:手提旅行包 知乎 编辑:程序博客网 时间:2024/05/17 22:34

题目描述:
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。
输入:
输入有多组数据。
每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
输出:
输出权值。
样例输入:
5
1 2 2 5 9
样例输出:
37


AC代码:

#include <iostream>#include <queue> #include <cstdio>using namespace std; priority_queue<int ,vector<int>,greater<int> > huffman; int N,data1,data2,weight = 0;int main(){    while(~scanf("%d",&N)){        while(!huffman.empty()){            huffman.pop();        }         for(int i = 0 ; i < N ; i++){            cin>>data1;            huffman.push(data1);        }        weight = 0;        while(huffman.size() > 1){            data1 = huffman.top();            huffman.pop();            data2 = huffman.top();            huffman.pop();            weight += data1+data2;            huffman.push(data1+data2);        }        cout<<weight<<endl;     }    return 0; } 
原创粉丝点击