
数据结构
陆小萌
这个作者很懒,什么都没留下…
展开
-
K叉哈夫曼树
定义: 哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 K叉哈夫曼树: 哈夫曼树的构造方法是贪心的每次选最小的几个节点构造。 当K>2K>2K>2的时候需要预处理一下,因为可能最后一步合并操作的点数不到K个节点,这样的话就不是最优的了。 K>2K>2K>2预处理方法: 当remain=(n−1) mod (k−1)≠0remain=(n-1)~mod~(k-1)\neq 0remain=(n−1) mod (k−1)=原创 2020-09-14 22:00:54 · 1163 阅读 · 0 评论 -
树的直径
之前写过一篇学军信友队趣味网络邀请赛 B.齐心抗疫,那篇文章中讲述了一种通过两次dfs就足以求得树的直径的方法,今天来学习另一种方法求树的直径——树形DP。 定义 树的直径:若树上两点u,vu,v间的最短路径最大,那么该路径的长度称为树的直径。(可以存在多条) 区别 两者的复杂度都是O(N)O(N)O(N) 方法1:简洁方便,只用求一次即可得到树的直径,适当修改一下树的直径的两端点也可以在求树的直径的时候记录下来。 方法2:可以记录到端点的距离,有些题目会用到。 1.树形DP求树的直径 令fff数组记录当前原创 2020-09-07 14:15:36 · 208 阅读 · 0 评论 -
学军信友队趣味网络邀请赛 B.齐心抗疫
学军信友队趣味网络邀请赛 B.齐心抗疫 题意 给你一棵每条边均为1的树,求任意两点距离乘两端点中大的那个数的乘积最大为多少? 思路 题意转化为公式就是求dis[x][y]∗max(a[x],a[y])dis[x][y]*max(a[x],a[y])dis[x][y]∗max(a[x],a[y]) 那么难点就在于求任意两点间的距离了。 这时候要抓住条件:这是一棵树! 利用树的直径的性质DFS三次即...原创 2020-04-06 01:21:01 · 520 阅读 · 0 评论 -
NC13886
NC13886 题意 给你一颗n(偶数)结点的树,将其分为n/2对,求所有对数相连的路径之和最小为多少? 思路 DFS 数据结构 既然是图论那就先画图吧 左图由于以2号结点为根节点的子树结点数(包括其自身)为3(奇数),那么显然这棵树上一定有个节点要从树外找一个节点相连,那么必须要经过2号结点与其父节点的这条路(2->1)。 右图告诉我们如果能偶数配对的子树则不需要相连。 叶子节点为子树的结...原创 2020-04-02 20:01:46 · 215 阅读 · 0 评论 -
NC82B
NC82B 题意 给你一个长为n的序列a和一个常数k 有m次询问,每次查询一个区间[l,r][l,r][l,r]内所有数最少分成多少个连续段,使得每段的和都 <= k 如果这一次查询无解,输出"ChthollyChthollyChtholly" 1<=n,m<=1e6,1<=ai,k<=1e91 <= n , m <= 1e6 , 1 <= a_i ...原创 2020-03-31 17:55:12 · 316 阅读 · 0 评论 -
Atcoder ABC157
C - Guess The Number 思路: 特判 模拟 #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <queue&...原创 2020-03-02 23:11:53 · 1009 阅读 · 0 评论