首页 > 其他分享 >[NOI2015] 荷马史诗

[NOI2015] 荷马史诗

时间:2023-08-20 23:33:55浏览次数:38  
标签:Node 个点 哈夫曼 荷马史诗 ll 合并 NOI2015 int

题目链接

洛谷

LOJ

题目分析

哈夫曼编码模板题。
使用 k 进制,即编码时将 k 个点合并为一个。

最后要求的就是哈夫曼编码的长度,以及哈夫曼树最深的节点的深度。

注意最后合并的时候可能会出现不满一层的情况,所以要在刚开始补成能恰好合并的哈夫曼树。
最后剩下一个节点,即需要合并掉 $n-1$ 个点,而每次合并减少 $k-1$ 个点,所以要想恰好合并,需要满足

$$
(n-1) \bmod (k-1) = 0
$$

我们可以在合并之前就把权重为 0 的点加上凑数

代码实现

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 100010;
typedef long long ll;
struct Node {
    ll w;
    ll depth;
    bool operator<(const Node& x) const
    {
        if (w != x.w) return w > x.w;
        return depth > x.depth;
    }
};

priority_queue<Node> q;
int n, k;
ll sum, ans, len;

int main()
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        ll ipt;
        cin >> ipt;
        q.push(Node{ipt, 0});
    }

    while ((q.size() - 1) % (k - 1) != 0) { 
        q.push(Node{0, 0});
    }

    while (q.size() > 1) {
        ll sum = 0, maxd = 0;
        for (int i = 1; i <= k; i++) {
            maxd = max(maxd, q.top().depth);
            sum += q.top().w;
            q.pop();
        }
        ans += sum;
        q.push(Node{sum, maxd + 1});
    }
    cout << ans << endl;
    cout << q.top().depth << endl;
    return 0;
}

标签:Node,个点,哈夫曼,荷马史诗,ll,合并,NOI2015,int
From: https://www.cnblogs.com/xiaoh0425/p/17644865.html

相关文章

  • 洛谷 P3243 [HNOI2015] 菜肴制作 - toposort 需自己理解翻译题面
    P3243[HNOI2015]菜肴制作题目描述知名美食家小A被邀请至ATM大酒店,为其品评菜肴。ATM酒店为小A准备了\(n\)道菜肴,酒店按照为菜肴预估的质量从高到低给予\(1\)到\(n\)的顺序编号,预估质量最高的菜肴编号为\(1\)。由于菜肴之间口味搭配的问题,某些菜肴必须在另一些......
  • 【题解】[HNOI2015] 落忆枫音
    题目传送门感觉这题挺有意思的,遂写。题目大意给出一个有向无环图,再给定两个点\(s\)和\(t\),表示在点\(s\)和\(t\)间加上一条边。求这个图有多少种生成树。题目分析首先考虑不加边之前的情况,假设给定下面这个图:根据树的定义,除根节点外的节点有且只有一个父亲节点,也就......
  • 【洛谷】P2150 [NOI2015] 寿司晚宴(状压dp+根号分治)
    原题链接题意有序列\(2,3,4\cdotsn\),对于序列中的每一个数,它可以被放入两个集合中的任意一个,或者不选。最后需要满足两个集合间的数两两互质(集合内部的数不需要满足互......
  • 荷马史诗
    这道homo(bushi)史诗已经压了好久了,今天终于大概理解了,其实如果是总长度最小的话就是权值*长度,想一个贪心思路,很显然,权值最大的点放在上面很显然更优,而使最大的k进制串最......
  • [HNOI2015]落忆枫音 题解
    题目背景...题目描述不妨假设枫叶上有n个穴位,穴位的编号为1~n。有若干条有向的脉络连接着这些穴位。穴位和脉络组成一个有向无环图——称之为脉络图(例如图1),穴位的......
  • 【题解】[Ynoi2015] 我回来了
    题目分析:所谓的期望乘以\(R-L+1\)其实就是求亵渎的触发次数,因为我们能选择的伤害只有\(R-L+1\)种。有一个很显然的转化,就是对于伤害\(d\),我们以随从的血量......
  • [Ynoi2015] 纵使日薄西山
    题传考虑一个\(a_i\)变为最大值的时候,由于它与两边的值相对大小不变,因此\(a_i\)造成的贡献必然是它自己,进一步地,题目操作可以简化为每次选择一个靠左地最大值,将其和左......
  • P1955 [NOI2015] 程序自动分析
    [NOI2015]程序自动分析题目简述输入的第一行包含一个正整数\(t\),表示需要判定的问题个数。注意这些问题之间是相互独立的。对于每个问题,包含若干行:第一行包含一个正......
  • P2146 [NOI2015] 软件包管理器 树链剖分
    //题目大意:给定一棵树,树上的每个节点是一个软件,现在给出如下两个指令,install与uninstall,//如果需要installx号软件,那么我需要安装他到根节点之间的所有软件;如......
  • 【HNOI2015】实验比较(树形DP,容斥)
    题意:给你一棵树,你要对所有节点定一个顺序序列,形如\(p_1\oplus_1p_2\oplus_2p_3\cdotsp_{n-1}\oplus_{n-1}p_n\),其中\(\oplus_i\)为\(=\)或\(<\),\(p_{1\simn}......