首页 > TAG信息列表 > P2168

洛谷P2168 [NOI2015] 荷马史诗 (哈夫曼树)

学了哈夫曼树这道题还是好想的,基本上和构造哈夫曼树的思路一样,但是题目要求最长si的最小值,所以用两个关键字的堆,第一关键字是把出现次数作为权值,第二关键字表示从该节点开始的最长长度,权值相同时,选择长度较小的合并。 1 #include<bits/stdc++.h> 2 using namespace std; 3 #de

P2168 [NOI2015] 荷马史诗

用哈夫曼树的思想,每次取出k小,合成。注意要加些0使得最后成为满k叉树 const int N=1e5+79; lxl n,k; struct node{ lxl w,d; bool operator <(const node &x)const { if(w!=x.w) return w>x.w;else return d>x.d;} }; std::priority_queue<node> q; int main() { read(n);re

题解 P2168 【[NOI2015]荷马史诗】(huffman编码)

------------恢复内容开始------------ 问题转化 \(Huffman\)编码 \(Huffman\)编码即通过统计字符串中不同字符所出现的次数作为叶节点构造一棵\(Huffman\)树。把这个\(Huffman\)树看成一棵\(Trie\),在\(k\)叉\(Huffman\)中不同分支对应着不同的\(k\)进制数,从根节点开始遍历路径,其

题解 P2168 【[NOI2015]荷马史诗】

题目链接 Solution [NOI2015]荷马史诗 题目大意:构造\(k\)叉哈夫曼树 分析:这题比较模板,可以当做复习初赛(大雾) 哈夫曼树的定义: 构造一棵有\(n\)个节点的\(k\)叉树,每个节点带有权\(w_i\),深度\(d_i\)(规定根深度为\(0\)),使得\(\sum w_i \times d_i\)最小 当\(k=2\)时即为合