Loading

摘要: 题意 有两颗树,在每棵树中选择一个结点并将它们两相连使得对于新的树的任意两点的距离总和最小。 思路 设 \(sz[u]\) 表示子树 \(u\) 的大小。 显然,将两数重心连接结果最优秀(根据树的重心定义)。 对于每条边,取它两端 \(sz\) 较小的那一个点 \(u\),那么这条边贡献为 \(sz 阅读全文
posted @ 2024-08-08 11:29 SunnyYuan 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 思路 对于每个连通块求出任意两点距离的最大值 \(max[u]\),然后再 \(O(n^2)\) 枚举任意两个连通块连接起来,答案就是两个连通块的最大值 \(max\) 加上中间连接的边的长度。 代码 #include <bits/stdc++.h> using namespace std; usi 阅读全文
posted @ 2024-08-08 11:28 SunnyYuan 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题意 来自洛谷: 思路 记录每个点 \(u\) 所在子树可以删去的最大的部分 \(part1\) 和次大的部分 \(part2\) 和除了 \(u\) 的子树以外的部分可以删去的最大的部分 \(up\),这些部分必须要求小于等于 \(\dfrac{n}{2}\),和找树的中心(注意不是重心)的思路差 阅读全文
posted @ 2024-08-08 11:22 SunnyYuan 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 思路 从下往上处理每个子树的重心。 对于任意点 \(u\),其所在子树的中心一定在 \(u\) 和 \(ans[to]\) 之间,\(ans[to]\) 是重儿子 \(to\) 的重心结点。 对于任意一点 \(u\),其所在子树的重心深度一定不大于 \(ans[to]\)。 代码 假设一个结点 \( 阅读全文
posted @ 2024-08-08 10:29 SunnyYuan 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 思路 如果一棵树有两个重心,那么从一个重心的一边切割一个点到另外一个重心即可。 如果一棵树只有一个重心,那么随意断掉一个点再恢复即可。 代码 #include <bits/stdc++.h> using namespace std; const int N = 100010; struct edge 阅读全文
posted @ 2024-08-08 10:27 SunnyYuan 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 题意 给定一张表,从 \((1, 1)\) 走到 \((n, n)\) 的路径上所有数字的乘积末尾的 \(0\) 的个数最少是多少。 思路 设 \(f_{i, j}\) 表示走到点 \((i, j)\) 获得因数 2 的最小数量。 设 \(g_{i, j}\) 表示走到点 \((i, j)\) 获得 阅读全文
posted @ 2024-08-01 19:21 SunnyYuan 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 前置知识 自然对数、分数次幂、概率。 前言 模拟退火可以在我们想不到题目正解的时候试一试 其实就是骗分方法。 因为纯随机得出正确答案的概率非常低,所以我们就可以加一定的优化,使找到答案概率增大。 算法思想 温度(步长):每次选择一个范围进行搜索,在搜索过程中范围不断缩小,最后到很小的时候就可以确定答 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(5) 评论(0) 推荐(0) 编辑
摘要: IDDFS 使用场景 使用 dfs 由于状态量太大会 TLE, bfs 会 MLE。 答案必须很小,一般在 20 以内。 算法原理 设置 dfs 的搜索深度限制 \(dep\),dfs 穷举 \(dep\) 层的答案。 若在 \(dep\) 层找到满足条件的情形,则 \(dep\) 则为答案,否则 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 记忆化搜索 思想 是实现 DP 的一种手段。 优点: 不关心递推顺序; 对于两维及以上的 DP,方便处理初始状态和无效状态。 缺点: 无法使用滚动数组。 注意事项: 要什么状态搜什么状态; 所有的状态转移都要采取直接搜索的数据很傻。 越界的状态不能赋值。 实现步骤: 先判断是否越界,如果越界则返回对 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 扩展欧几里得算法 思想 首先回忆一下裴蜀定理:对于任意一对不全为 \(0\) 的整数 \(a, b\),存在 \(x, y\) 使得 \(ax + by = \gcd(a, b)\)。 扩展欧几里得算法就是求出一组解满足 \(ax + by = \gcd(a, b)\),这里用到了欧几里得算法,不会 阅读全文
posted @ 2024-07-22 09:16 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑