3319 哈夫曼树 优先队列 最小堆
#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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-09-30 TZOJ 3692: 紧急援救 最短路/dijstra