hdu 2527哈夫曼树(二叉树的运用)
#include<stdio.h>
#include<string.h>
#define N 100
#define INF 2000000000
int b[N];
char s[100001];
struct nodee{
int parent,lson,rson,visit,weight;
}a[N];
int main() {
int t,n,m,count,i,j,max1,max2,total,sum;
scanf("%d",&t);
while(t--) {
scanf("%d",&total);
scanf("%s",s);
count=0;
memset(b,0,sizeof(b));
for(i=0;s[i];i++)
b[s[i]-'a']++;
j=1;
for(i=0;i<26;i++)
if(b[i]) {
a[j].lson=a[j].rson=a[j].parent=a[j].visit=0;
a[j].weight=b[i];
j++;
}
count=j-1;
for(i=1;i<count;i++) {//creat 哈夫曼树
max1=max2=INF;
n=m=0;
for(j=1;j<count+i;j++) {
if(!a[j].visit&&a[j].weight<max1) {
m=n;
max2=max1;
n=j;
max1=a[j].weight;
}
else
if(!a[j].visit&&a[j].weight<max2) {
m=j;
max2=a[j].weight;
}
}
a[count+i].weight=a[n].weight+a[m].weight;
a[count+i].lson=n;
a[count+i].rson=m;
a[count+i].visit=0;//这个要初始化,不然不对
a[n].parent=count+i;
a[m].parent =count+i;
a[n].visit=1;
a[m].visit=1;
}
sum=0;
for(i=count+1;i<=count*2-1;i++)//相当于求所有叶节点的带权路径长度
sum+=a[i].weight;
if(count==1)
sum=a[1].weight;
if(sum<=total)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
hdu 2527哈夫曼树(二叉树的运用)的更多相关文章
- 哈夫曼树;二叉树;二叉排序树(BST)
优先队列:priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比 ...
- HDU 1053 & HDU 2527 哈夫曼编码
http://acm.hdu.edu.cn/showproblem.php?pid=1053 #include <iostream> #include <cstdio> #in ...
- hdu 2527:Safe Or Unsafe(数据结构,哈夫曼树,求WPL)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 两个队列+k叉哈夫曼树 HDU 5884
// 两个队列+k叉哈夫曼树 HDU 5884 // camp题解: // 题意:nn个有序序列的归并排序.每次可以选择不超过kk个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过TT, ...
- 哈夫曼树【最优二叉树】【Huffman】
[转载]只为让价值共享,如有侵权敬请见谅! 一.哈夫曼树的概念和定义 什么是哈夫曼树? 让我们先举一个例子. 判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设 ...
- 6-9-哈夫曼树(HuffmanTree)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第6章 树和二叉树 - 哈夫曼树(HuffmanTree) ——<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版> ...
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...
- 树&二叉树&哈夫曼树
1.树 需要注意的两点:n(n>=0)表示结点的个数,m表示子树的个数 (1)n>0时,树的根节点是唯一的. (2)m>0时,子树的个数没有限制. 结点的度和树的度 (1)结点的度是 ...
- 【algo&ds】【吐血整理】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、B树、字典树、红黑树、跳表、散列表
本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢. 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结 ...
随机推荐
- java静态代理实例
package test; class ProxyTest { public static void main(String[] args) { ProxyClass proxy = new Prox ...
- 【转载】UML图示与代码对照
一.类继承 public class Father { } public class Child : Father { } 二.接口继承 public interface IBreath { } pu ...
- 仪表盘(Speedometer) icon 设计
- PropertyInfo 类
[AttributeUsage(AttributeTargets.Property)] //Models 特性 public class CanWriteAttribute : Attr ...
- [Swift通天遁地]九、拔剑吧-(4)使用开源类库创建可滑动的Segment分段控件
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 分享一些对IT人员非常好用的资源
前言 分享一下本人工作至今整理的一些好用的资源,这些资源主要是一些工作和生活中用到的文档.软件和网站. 文档主要是面试相关的文档和技术文档,其中面试文档主要是Java这块的,技术文档就有很多,除了Ja ...
- ACM_圆的面积
圆的面积 Time Limit: 2000/1000ms (Java/Others) Problem Description: AB是圆O的一条直径,CD.EF是两条垂直于AB的弦,并且以CD为直径的 ...
- [转]linux之pr命令
转自:http://www.bitscn.com/plus/view.php?aid=6638 本文介绍如何使用Linux的pr命令将大文件分割成多个页面进行打印,并在每个页面上加上标题. Linux ...
- JS——select标签
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 170925_1 Python socket 创建TCP的服务器端和客户端
[Python版本]3.6 [遇到的问题] 客户端和服务器端都遇到:TypeError: a bytes-like object is required, not 'str' [解决方案] 参考:ht ...