带权路径长度 hnust数据结构
来源:互联网 发布:软件著作权登记申请表 编辑:程序博客网 时间:2024/06/05 08:58
问题 U: 带权路径长度
时间限制: 2 Sec 内存限制: 128 MB提交: 268 解决: 48
[提交][状态][讨论版]
题目描述
给定n个权值作为n个叶子结点,构造哈夫曼树, 求其带权路径长度。
输入
输入由多组数据组成。
每组数据分成两行。第一行仅一个整数n(2<=n<=100000)。第二行有n个空格分开的权值,值范围在[1,1000000000]之间。
输出
对于每组测试数据,输出一行,即其对应哈夫曼树的带权路径长度对1000000007取模。
样例输入
47 5 2 485 29 7 8 14 23 3 11
样例输出
35271
首先哈夫曼数的带权路径长度不仅仅可以按照常规方法求,它也是所有非叶子节点之和,所以我们可以维护一个队列,每次取最小的两个数进行相加,再PUSH进队列中。一直到队列为空,最后一个出队列的数便是答案。我们用STL中的优先队列可以很快AC掉这道题。不过老师的初衷是让我们自己编写平衡二叉树去实现,这里因为接触过STL所以偷懒了。
#include <iostream>#include <stdio.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <queue>using namespace std;struct cmp{ bool operator()(long long x,long long y) { return x>y; }};int main(){ int n; long long num[100000]; while(scanf("%d",&n)!=EOF) { priority_queue <long long,vector<long long>,cmp>q; for(int t=1; t<=n; t++) { cin >> num[t]; q.push(num[t]); } long long sum=0; long long a=0; long long b=0; long long x=0; for(int t=2; t<=n; t++) { a=q.top(); q.pop(); b=q.top(); q.pop(); sum+=a+b; x=a+b; q.push(x); } sum=sum%1000000007; cout << sum <<endl; } return 0;}
阅读全文
0 0
- 带权路径长度 hnust数据结构
- 【数据结构】求节点的哈夫曼的带权路径长度
- 求其带权路径长度
- 数据结构之哈夫曼树的构造以及对哈夫曼树求解带权最优外部路径长度
- 求哈夫曼的带权路径长度
- 哈夫曼树 带权路径长度WPL
- 哈夫曼树的带权路径长度
- 带权路径长度 层次遍历
- 解决关于哈夫曼编码计算带权路径长度问题
- 优先队列解哈夫曼编码问题之带权路径长度
- 哈夫曼编码计算带权路径长度问题
- 求哈夫曼树最小带权路径长度和代码
- 哈夫曼树结构和带权路径长度计算
- hnust
- hnust
- hnust
- hnust
- hnust
- linux内核驱动--Platform Device和Platform_driver注册过程
- Android源码分析--View的事件分发机制
- jsp forEach语法
- 计算机网络之面试常考——转自牛客网
- 调通全志R16平台的AP6212A0版本的BT(分色排版)v1.2
- 带权路径长度 hnust数据结构
- ios-图片加载
- HTTP协议知多少-关于http1.x、http2、SPDY的相关知识
- python 如何设置多线程
- 仿京东淘宝等首页广告弹窗广告 dialog
- C++重点知识整理
- SyntaxError: Non-ASCII character '\xe4'错误
- Android之android.os.NewWorkOnMainThreadException解决办法
- openLayers2 画图标