zoukankan      html  css  js  c++  java
  • 哈夫曼树

    题目描述:
    哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。
    输入:
    输入有多组数据。
    每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
    输出:
    输出权值。
    样例输入:
    5 1 2 2 5 9
    样例输出:
    37
     
    #include<iostream>
    #include<stdio.h>
    #include<queue>
    using namespace std;
     
     
    int main(){
    int n;
    priority_queue<int, vector<int>, greater<int> > q; //小顶堆
    while (cin>>n){
    while (!q.empty())
    q.pop();
    int x;
    while (n--){
    cin>>x;
    q.push(x);
    }
    int ans=0;
    while (q.size()>1){
    int a = q.top();
    q.pop();
    ans += a;
    int b = q.top();
    q.pop();
    ans+=b;
    q.push(a+b);
    }
    cout<<ans<<endl;
    }
     
     
    return 0;
    }
     
    每一组测试前,注意把队列清空
    优先队列的写法
    建立小顶堆,
    q.size
  • 相关阅读:
    物质的物理属性·基础整理
    点分治
    洛谷 P3806 【模板】点分治1
    因式分解
    小石潭记
    反演原理及二项式反演
    《庄子》二则
    FFT快速傅里叶变换
    mysql 密码相关
    django基础
  • 原文地址:https://www.cnblogs.com/yexiaoqi/p/7221966.html
Copyright © 2011-2022 走看看