FZU2219 StarCraft(哈夫曼树)
一个工人可以变成两个工人,这样可以画出一颗二叉树,那么就是在叶子上建的建筑。
问题的时间花费,可以看作是这颗二叉树中各个叶子的深度*k+叶子对应建筑耗费时间中的最大值。
容易想到,类似哈夫曼树一样,从叶子出发往上合并,直到连通分量数小于等于m,结点的权值设定为w=max(lw,rw)+k。
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int t,n,m,k,a;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
priority_queue<int, vector<int>, greater<int> > que;
for(int i=;i<n;++i){
scanf("%d",&a);
que.push(a);
}
while(n>m){
int w1=que.top(); que.pop();
int w2=que.top(); que.pop();
que.push(w2+k);
--n;
}
int res=;
while(!que.empty()){
res=max(res,que.top());
que.pop();
}
printf("%d\n",res);
}
return ;
}
FZU2219 StarCraft(哈夫曼树)的更多相关文章
- (哈夫曼树)HuffmanTree的java实现
		
参考自:http://blog.csdn.net/jdhanhua/article/details/6621026 哈夫曼树 哈夫曼树(霍夫曼树)又称为最优树. 1.路径和路径长度在一棵树中,从一个结 ...
 - 数据结构之C语言实现哈夫曼树
		
1.基本概念 a.路径和路径长度 若在一棵树中存在着一个结点序列 k1,k2,……,kj, 使得 ki是ki+1 的双亲(1<=i<j),则称此结点序列是从 k1 到 kj 的路径. 从 ...
 - C++哈夫曼树编码和译码的实现
		
一.背景介绍: 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的 ...
 - 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现
		
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
 - 哈夫曼树---POJ3253
		
http://poj.org/problem?id=3253 这就是 最典型的哈夫曼树的题型,我们就根据这道题学习一下哈夫曼树 这是最开始我们把21据下来之后我们据下8,然后再据下5得到34,可以看出 ...
 - 哈夫曼树(三)之 Java详解
		
前面分别通过C和C++实现了哈夫曼树,本章给出哈夫曼树的java版本. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载请注明出处:htt ...
 - 哈夫曼树(二)之 C++详解
		
上一章介绍了哈夫曼树的基本概念,并通过C语言实现了哈夫曼树.本章是哈夫曼树的C++实现. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载 ...
 - 哈夫曼树(一)之 C语言详解
		
本章介绍哈夫曼树.和以往一样,本文会先对哈夫曼树的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若 ...
 - 51nod 1117 聪明的木匠 (哈夫曼树)
		
题目:传送门. 题意:中文题. 题解:就是构造一颗哈夫曼树,数据结构里的知识. #include <iostream> #include <cstdio> #include & ...
 
随机推荐
- [Effective JavaScript 笔记]第40条:避免继承标准类
			
ECMAScript标准库里配备了许多重要的类,如Array,function,以及Date等.扩展这些类生成子类可以方便完成很多工作,但它们的定义具有很多特殊的行为,所以很难写出行为正确的类. Ar ...
 - mysql如何用order by 自定义排序
			
mysql如何用order by 自定义排序 id name roleId aaa bbb ccc ddd eee ,MySQL可以通过field()函数自定义排序,格式:field(value,st ...
 - mac os x查看端口命令
			
`netstat` 命令 a. `netstat -nat | grep <端口号>` 转自: http://my.oschina.net/foreverich/blog/402252
 - 完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库
			
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...
 - 【JAVA、C++】LeetCode 002 Add Two Numbers
			
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
 - codeforces  468A. 24 Game  解题报告
			
题目链接:http://codeforces.com/problemset/problem/468/A 题目意思:给出一个数n,利用 1 - n 这 n 个数,每个数只能用一次,能否通过3种运算: + ...
 - git merge和个git rebase的区别
			
http://stackoverflow.com/questions/16666089/whats-the-difference-between-git-merge-and-git-rebase/16 ...
 - BP神经网络模型与学习算法
			
一,什么是BP "BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最 ...
 - Android Bander设计与实现 - 设计篇
			
转自:http://blog.csdn.net/universus/article/details/6211589#t7 Binder Android IPC Linux 内核 驱动 摘要 Binde ...
 - jQuery Mobile 基础
			
第一章 1.页面: <body> <div data-role="page"> <div data-role="header"&g ...