![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
堆
逐日的少年
这个作者很懒,什么都没留下…
展开
-
huffman树
一、定义:k叉Huffman树是包含着n个带权值的叶子节点,使所有的叶子节点到边的距离与权值之积的和最小并且分支不超过k的一种构造树二、构造方法:首先我们知道权值最大的点应该放在最下方,所以我们可以从底部往根节点方向构造,每次我们可以合并最多k个节点,也就是说每次合并我们减少了(k-1)个节点,我们需要正好剩一个节点,所以我们可以添加0节点使(节点个数-1)被(k-1)整除,此时每次合并k个权值最小的节点生成他们的一个父节点,父节点权值为子节点权值之和,直到只剩一个节点,此节点为根节点。所求值等于所有原创 2021-05-26 23:29:45 · 105 阅读 · 0 评论 -
AC
题意:思路:用可返回堆即通过双向链表和小根堆(可以用STL的优先队列)实现.代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const ll inf=1e9+7;char s[1000005], t[1000005];int head=-1, pre[1000005], Next[1000005], val[10000原创 2021-05-13 22:24:20 · 89 阅读 · 0 评论 -
二叉堆知识总结及相关题目题解
一、二叉堆性质:1.数据结构是一颗完全二叉树2.任意一个节点小于父节点称为”大根堆“,任意节点小于父节点称为”小根堆"二、使用数组实现的小根堆二叉堆操作:1.向上调整:此时该节点不满足二叉堆性质,则通过与父节点交换来满足二叉堆性质,然后调整父节点,不断向上调整,使其满足性质为止.void Up(int v){ while(v>1) { if(a[v/2]>a[v]) { swap(a[v/2],a[v]);原创 2021-05-12 21:23:00 · 271 阅读 · 0 评论