首页 > 其他分享 >3319 哈夫曼树 优先队列 最小堆

3319 哈夫曼树 优先队列 最小堆

时间:2024-09-30 16:23:51浏览次数:6  
标签:优先 哈夫曼 队列 结点 3319 int 权值

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 10, inf = 0x3f3f3f3f;

// 优先队列(最小堆),用于存储叶结点的权值
priority_queue<int, vector<int>, greater<int>> q;
int n, ans, x;

int main() {
    // 读取叶结点的数量
    cin >> n;
    // 读取每个叶结点的权值,并将其放入优先队列
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> x;
        q.push(x);
    }

    // 构建哈夫曼树
    while (q.size() > 1) {
        // 取出两个最小的权值
        int a = q.top(); q.pop();
        int b = q.top(); q.pop();
        // 累加这两个权值之和到带权路径长度
        ans += a + b;
        // 将合并后的权值重新放入优先队列
        q.push(a + b);
    }

    // 输出最终的带权路径长度
    cout << ans;
    return 0;
}

 

标签:优先,哈夫曼,队列,结点,3319,int,权值
From: https://www.cnblogs.com/jyssh/p/18442052

相关文章

  • WPF下使用FreeRedis操作RedisStream实现简单的消息队列
    RedisStream简介RedisStream是随着5.0版本发布的一种新的Redis数据类型:高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据添加时被唤醒并开始......
  • Java中的队列数据结构及其应用
    Java中的队列数据结构及其应用队列是一种线性数据结构,遵循先进先出(FIFO)的原则,即最先插入的元素最先被移除。队列的基本操作包括入队(enqueue)、出队(dequeue)和查看队头元素(peek)。本文将介绍队列的基本结构、操作及在JDK中的应用。队列的基本结构一个简单的队列可以用数组或......
  • 算法题:用队列实现一个链表
    下面是添加了注释的ListNode类和LinkedListQueue类,以帮助理解每个部分的功能和目的://定义链表节点类,用于存储队列中的元素classListNode{intval;//存储节点的值ListNodenext;//指向下一个节点的指针//构造函数,用于创建新的节点ListNod......
  • 队列的深度解析:链式队列的实现
    引言队列是一种广泛应用于计算机科学的数据结构,具有先进先出(FIFO)的特性。在许多实际应用中,例如任务调度、缓冲区管理等,队列扮演着重要角色。本文将详细介绍队列的基本概念,并通过链表实现一个简单的队列。一、基本概念1.1定义队列是一种线性数据结构,遵循先进先出(FIFO,Firs......
  • 循环队列入队出队
    队列队列特性:先进先出限定插入操作只能在队尾进行,而删除操作只能在队头进行。循环队列:一种线性数据结构,其操作表现基于先进先出,队尾被连接在队首之后以形成一个循环。循环队列的操作与普通队列类似,但又有独特的优点下面给出一些循环队列的操作函数:队列创建、入队、......
  • 单调队列优化DP解题报告(uoj转)
    Fence\(K\)很小,考虑\(K\)开一维,\(N\)开一维\(f_{i,j}\)表示前\(i\)个工匠粉刷前\(j\)个木板的最大花费\(f_{i,j}=\min_{k=j-l_i}^{s_i-1}f_{i-1,k}+(j-k)\cdotp_i\)拆开为\(f_{i,j}=f_{i-1,k}-k\cdotp_i+j\cdotp_i\)\(i\)固定时维护\(f_{i-1,k}-k\cdotp_i\)的最小......
  • 数据结构之——队列
    一、队列概述        队列是一种操作受限的线性表,其限制条件为允许在表的一端进行插入,而在表的另一端进行删除。插入的一端叫做队尾,删除的一端叫做队头。向队列中插入新元素的行为称为进队,从队列中删除元素的行为称为出队。例如军训的时候,都排成一列,有头有尾。假设你......
  • 图解二叉堆(优先队列)TS实现
    结构性:用数组表示的完全二叉树堆序性:任意一个根节点比其所有子树节点大(小)我们以数组作为存储结构,这样直接就可以明白,二叉堆需要的是完全二叉树即除了最后一层其他层都需要填满且最后一层的节点需要满足从左往右。节点关系:对于给定的节点i(假设数组索引从0开始):父节点的......
  • 信息学奥赛复赛复习04-CSP-J2019-04-加工零件-位运算、整数映射0或1、结构体、初始化
    PDF文档回复:20240926<12019CSP-J题目4加工零件[题目描述]凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有n位工人,工人们从1∼n编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带如果......
  • 信息学奥赛复赛复习04-CSP-J2019-04-加工零件-位运算、整数映射0或1、结构体、初始化
    PDF文档公众号回复关键字:2024092612019CSP-J题目4加工零件[题目描述]凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有n位工人,工人们从1∼n编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带......