Loading

摘要: 题目 点击查看题目 题目描述 一场可怕的地震后,人们用 \(N\) 个牲口棚(编号 \(1\sim N\))重建了农夫 John 的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是唯一的。因此,牧场运输系统可以被构建成一棵树。 John 想要知道另一次地震会造成多严重 阅读全文
posted @ 2024-08-12 10:24 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题意 注意: 要预留一秒的时间!!!不然你就 80 pts 分了。 小偷要回到大门。 思路 定义 \(f_{i, j}\) 表示到在 \(i\) 的子树内拿 \(j\) 幅画。 那么我们可以枚举 \(f_{to, k}\) 表示在儿子结点拿 \(k\),那么总共为 \(f_{u, j + k} = 阅读全文
posted @ 2024-08-12 00:17 SunnyYuan 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 题意 有 \(n\) 个箱子、\(n\) 种颜色的球,第 \(i\) 种颜色的球有 \(w_i\) 个,最开始时都在第 \(1\) 个箱子中。 每次可以从有球的一个箱子中拿出所有球,并随意分割为 2 部分或 3 部分,并放入箱子,需要的代价为球的总数。 问将每种颜色的球都放在对应的一个箱子中需要的代 阅读全文
posted @ 2024-08-10 13:19 SunnyYuan 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题意 给定一个字符串 \(s\) 和整数 \(k\)。 求:1. k 叉哈夫曼树的带权路径之和;2. 求合法的哈夫曼树中,最小的高度是多少。 思路 按照普通二叉哈夫曼树对其进行编码,将其转化为 \(k\) 叉哈夫曼树。 编码有可能出现合并到根节点的时候不足 \(k\) 个结点,这会造成结果不优,所以 阅读全文
posted @ 2024-08-10 10:42 SunnyYuan 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 哈夫曼树 定义 带权路径长度:结点的权值乘以结点到跟的距离。 树上所有结点带权路径长度之和最小的二叉树称为哈夫曼树。 性质 哈夫曼是满二叉树。 来自维基百科: 原序列构成哈夫曼树的所有叶子结点。 离根结点越近,点权越大。 非叶子结点的点权之和就是所有叶子结点的带权路径之和。 哈夫曼树的叶子结点数量为 阅读全文
posted @ 2024-08-10 09:32 SunnyYuan 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题意 将每个字符串哈夫曼编码,输出 ASCII 需要位数、哈夫曼编码所需位数、压缩率。 思路 建哈夫曼树,将每个字符编码,然后再对应回去。 代码 注意处理只有一种字母的情况。 交 POJ 要改一堆乱七八糟的东西。 这个代码可以在 HDU 通过。 代码1:将哈夫曼树建出来 #include <bits 阅读全文
posted @ 2024-08-09 23:56 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题意 给定图: 每次在叶子结点加入两个点,并实时输出树的直径长度。 思路 每次增加两个点,直径至多变化一个点,长度最多加 1,所以对加入的点处理 lca,并且更新长度和点即可。 代码 #include <bits/stdc++.h> using namespace std; const int N 阅读全文
posted @ 2024-08-09 10:57 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题意 给出 3 个点,选出一个点使得 3 个点到这个点的距离之和最小。 思路 三个点可以先取 2 个点的 lca,然后与第 3 个点再取 lca。 三个点的两两求 lca,至多只会有 2 个不同的结点。 三个点的距离 \(dis[x] + dis[y] + dis[z] - dis[lca(a, b 阅读全文
posted @ 2024-08-09 10:33 SunnyYuan 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 题意 判断树上两条路径是否相交。 思路 可以根据距离进行判断。 如果 \(dis(u, v) = dis(lca(g, t), u) + dis(lca(g, t), v)\),说明 \(g\) 和 \(t\) 的 \(lca\) 在 \(u\) 到 \(v\) 的路径上,两条路径相交。 如果 \( 阅读全文
posted @ 2024-08-09 09:18 SunnyYuan 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 我来讲一讲我的做法,时间复杂度 \(O(n \log n)\)。 适宜阅读 2024/7/26 upd:都快写成流水账了。 首先,我们定义 \(p\) 数组中一个数字 \(p_i\) 的下一个数字为: 对于 \(1 \le i \le n - 1\),\(p_i\) 的下一位为 \(p_{i + 1 阅读全文
posted @ 2024-08-08 12:14 SunnyYuan 阅读(4) 评论(0) 推荐(0) 编辑