题目链接:http://uva.onlinejudge.org/external/126/12676.pdf

题型:数据结构

题意:

话说这题目可真长,读了两三遍不知道啥意思。。。

关于字符串转换为哈夫曼树的,题意太绕,我说不明白了,,,,

分析:

直接上分析,采用优先队列,按照先层数后权值的二级排序,当前层的叶子节点的值取下一层的节点中的最大值,推到最后就可以得出答案。

注意用long long,这里被坑了一下。。。

代码:

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<vector>
#define LL long long
using namespace std;int n;struct Node{int id;LL value;friend bool operator < (Node A,Node B){if(A.id == B.id){return A.value < B.value;}return A.id < B.id;}
}a[60];LL MAXN[60];priority_queue<Node> q;int main(){while(~scanf("%d",&n)){while(!q.empty()) q.pop();int MAX = -1;for(int i=0;i<n;i++){scanf("%d",&a[i].id);a[i].value = -1;q.push(a[i]);MAX = max(MAX,a[i].id);}memset(MAXN,0,sizeof(MAXN));MAXN[MAX] = 1;LL sum = 0;while(!q.empty()){// printf("%d===>%d\n",q.top().id,q.top().value);Node s1,s2;s1 = q.top();q.pop();if(q.empty()){sum = s1.value;break;}s2 = q.top();q.pop();if(s1.id == MAX && s2.id == MAX){s1.value = 1;s2.value = 1;}else{if(s1.value == -1){s1.value = MAXN[s1.id+1];}if(s2.value == -1){s2.value = MAXN[s2.id+1];}}Node ts;ts.id = s1.id - 1;ts.value = s1.value + s2.value;q.push(ts);MAXN[ts.id] = max(MAXN[ts.id],ts.value);}printf("%lld\n",sum);}return 0;
}
/*
2
1 1
4
2 2 2 2
10
8 2 4 7 5 1 6 9 3 9
*/

UVA_12676_Inverting Huffman(哈夫曼树)相关推荐

  1. Huffman哈夫曼树编码字符,binarytree,Python

    Huffman哈夫曼树(霍夫曼树,赫夫曼树)在通信领域最主要的应用是数据编码.假设现在有A.B.C.D.E五个字符,它们出现的概率或者权值不同,从A到E,权值依次降低,那么就可以用哈夫曼最优二叉树对其 ...

  2. 每日四题打卡-4.15:耍杂技的牛/贪心绝对值不等式-货仓选址/贪心排序不等式-排队打水/huffman哈夫曼树-合并果子

    耍杂技的牛 具体:https://blog.csdn.net/qq_27262727/article/details/105515507 农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此 ...

  3. Huffman霍夫曼树,霍夫曼编码

    霍夫曼树基本概念: 路径:从一个结点往下到孩子或孙子结点之间的同理 路径长度:如结点1到结点7的路径长度=2 结点的权:将结点的某一属性值作为结点的权 带权路径长度:从根节点到该结点*该结点的权:如结 ...

  4. Java实现Huffman哈夫曼树(数组实现)

    代码如下: package HuffmanTreeArrays;import java.util.ArrayList; import java.util.Scanner;public class Hu ...

  5. Java实现Huffman哈夫曼树

    代码如下: package HuffmanTree;import java.util.ArrayList; import java.util.LinkedList; import java.util. ...

  6. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  7. huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码

    艾薇巴蒂!许久不见甚是想念,想必这"涨姿势"的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码 构造哈夫曼树 首先,我们需要了解哈夫曼树是什么: 相关知 ...

  8. java哈夫曼_用 JAVA 实现哈夫曼树(Huffman Tree)

    -1. 什么是树 树是一种 有层次关系的 数据结构.它由结点组成. 图一: 树的结点由 数据域 和 子结点域 组成.数据域 作为数据的容器:子结点域 存放 子结点 的地址.一个结点是它的子结点的父结点 ...

  9. 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块

    [题目]D. Huffman Coding on Segment [题意]给定n个数字,m次询问区间[l,r]的数字的哈夫曼编码总长.1<=n,m,ai<=10^5. [算法]哈夫曼树+莫 ...

最新文章

  1. 网红 AI 高仿坎爷发布说唱情歌,歌迷:堪比真人原声
  2. Python数据结构与算法—队列
  3. 历经 7 年双 11 实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?
  4. 九余定理(hdu1013)
  5. 【机器学习】为什么GBDT可以超越深度学习
  6. H5页面在 ios 端滑动不流畅的问题
  7. .net知识和学习方法系列(二十)CLR-委托
  8. 【数据结构、算法】八大排序算法概述(算法复杂度、稳定性)
  9. java easyui分页源码_SpringMVC+easyUI中datagrid分页实现_2014.5.1
  10. mybatis如何处理参数
  11. 风之大陆互通服务器账号,风之大陆有几个服务器?服务器互通吗?
  12. PASCAL VOC 2007数据集,百度云下载
  13. 2、Ubuntu下安装Vivado下的下载器驱动 Digilent 版本
  14. 从I到R:人工智能语言简史
  15. UVM-- Sequencer和driver
  16. STM32 | STM32CubeMX基础之TIM
  17. 03 ,线性代数 :集合,空间,群,阿贝尔群,向量,向量空间
  18. 向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读(经典)
  19. 雅诗兰黛中国创新研发中心在上海揭幕;安联贸易任命中国区行政总裁 | 美通企业日报...
  20. centos7 输入 ifconfig 不显示 ip 地址 连接不上的解决方法(亲测成功)

热门文章

  1. java编写实现更新_Android实现APP自动更新功能
  2. EF 通用帮助类 含分页 Lambda 拼接表达式
  3. 用Cordova打包Vue项目为app
  4. 普通路由器改4g路由器_4G工业路由器物联卡批发价格是多少?良心厂家推荐
  5. 记录win10突然卡死,只有鼠标能动,无法点击,大小写灯失效,只能强制关机
  6. java一般自学多久
  7. Unity之ASE实现冰冻效果
  8. python寒假培训第二课
  9. Envoy 调试流量的常用技巧直播分享及问答整理
  10. ResNet残差网络——Deep Residual Learning for image recongnition