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;
}
最新文章
- Masonry介绍与使用实践:快速上手Autolayout
- 微信支付-“申请退款”接口遇到curl出错,错误码:58
- 生成Excel直接以流或字节形式发给客户端,无需在服务生成一个实体文件。
- JS 学习笔记--11---内置对象(Global/Math)
- 【ERROR】---Error executing ";adb devices";:ADB server didn&#39;t ACK
- A记录、CNAME记录、MX记录
- C#实现微信开发
- 快速创建InfoPath表单
- python爬虫学习--防盗链
- 介绍一个全局最优化的方法:随机游走算法(Random Walk)
- 【工具相关】Web-ionic-npm的安装
- python之tkinter使用-单级菜单
- CodeChef - MRO Method Resolution Order(打表)
- python-selenium 并发执行用例的问题
- 4G模块ME3760_V2 端口映射
- 再不学会这些技巧,你就OUT了!
- redux源码阅读之compose,applyMiddleware
- [原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法
- arch搭建SVN服务器
- FusionCharts使用教程:为JavaScript图表提供数据
热门文章
- 8.2 OSI模型
- Django day31 contentType组件,Django的缓存
- 【洛谷1117_BZOJ4650】[NOI2016] 优秀的拆分(哈希_后缀数组_RMQ)
- hdu2030
- action=";post"; 、 servletconfig 、 servletcontext 、getPrintWiter() 、context-param、 init-param(第一个完整的servlet)
- myeclipse配置tomcat后,无法正常使用的问题
- Java系列学习(零)-写在前面的话
- Java编程思想读书笔记_第二章
- MVC5+EasyUI+EF6+Linq通用权限系统出炉(1)
- hibernate注解之@Onetomany、@Manytoone、@JoinColumn