九度1112:哈夫曼树 STL中堆的使用

Problem Description

哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。

int main()
{
    int n,temp,ans;
    Node a,b;
    while (cin>>n)
    {
        ans=0;
        vector heap;
        for (int i=0;i>temp;
            Node node;
            node.deep=0;
            node.weight=temp;
            heap.push_back(node);
        }
        make_heap(heap.begin(),heap.end(),greater());//默认Less,最大堆
        while (heap.size()>1)
        {
//            for (vector::iterator i=heap.begin();i!=heap.end();i++)
//            {
//                cout<<*i<<" ";
//            }
            cout<<"\n";
            pop_heap(heap.begin(),heap.end(),greater());//这些都需要加参数
            a=heap.back();
            heap.pop_back();
            pop_heap(heap.begin(),heap.end(),greater());
            b=heap.back();
            heap.pop_back();
            Node c;
            c.deep
            c.weight=a.weight+b.weight;
            heap.push_back(a+b);
            ans+=a+b;
            push_heap(heap.begin(),heap.end(),greater());
        }

        cout<

注意事项

1.WPL有一个简便运算,就是所有非叶子节点的权重和,知道这一点就容易多了
2.priority_queue内部也是使用vector容器,使用make_heap\push_heap两个函数的最大堆,这两个函数默认都是less,故要用的话每次都要改参数

你可能感兴趣的:(九度1112:哈夫曼树 STL中堆的使用)