- 博客(17)
- 收藏
- 关注
原创 树上倍增下的 LCA 问题
中深度较大的开始,先使深度较大的缩短到最接近另一个深度的节点(自己 / 最近的祖先),然后一直向上即可。给定一颗有根树,若节点 k 既是节点 x 的祖先,又是节点 y 的祖先,则称 k 是。要解决这个问题,我们还要求出每个节点的深度,可以使用 dfs 解决。的所有公共祖先中,深度最大的称为最近公共祖先,记作。步到达的祖先节点,若此节点不存在则设。因为讲解倍增,所以这里使用。在处理 LCA 时,我们以。LCA,最近公共祖先问题。的第一个中途交汇点。注:本代码用于 AC。
2024-09-14 18:15:47 1011
原创 倍增 and RMQ 问题
倍增,从字面及数学的角度就是 ”成倍增长“ 的意思。这能使线性问题转化为数级处理,优化时间复杂度。不是人话是不是?听不懂是不是?看这里。这是指我们在进行递推时,如果状态空间很大,通常的线性递推无法满足时间与空间复杂度的要求,那么我们可以通过成倍增长的方式,只递推状态空间中在222的整数次幂位置上的值作为代表。因为基本定理:任意整数可以表示成若干个2的次幂项的和 这一性质,使用之前求出的代表值拼成所需的值。”倍增“ 与 ”二进制划分“ 两个思想相互结合,降低了求解很多问题的时间与空间复杂度。
2024-09-14 09:59:03 381
原创 Floyd 算法
核心代码只有三层循环,一行更新,十分简洁,可是这四行代码为什么就能求出任意两点的最短路径呢?f_{k - 1, i, k} + f_{k - 1, k, j} & 经过 k 节点 \。注:每次全排列后,通过最短路到达目前执行边起点,在起点加上本边边权。最短路径的子路径仍然是最短路径,这个定理显而易见,比如一条。但是,既然是动态规划,那么我们就要为问题做一个全新的定义。既然要经过所有边,我们就转化为要经过所有指定边的点。的最短路,反过来,如果说一条最短路必须要经过点。
2024-09-09 18:28:37 774
原创 DP 详解
DP(Dynamic programming,全称动态规划),是一种基于分治,将原问题分解为简单子问题求解复杂问题的方法。动态规划的耗时往往远少于朴素(爆搜)解法。很简单的名字,即为使用空间的代价来确保不会超时。分类讨论就是分类 --> 讨论!分类讨论就是将问题通过不同的结果 / 形式 / 不同点分成几类逐个解决。
2024-09-09 18:27:36 1973
原创 Hexo + redefine主题配置个人博客
我们使用 redefine 主题,这个主题的自定义,方便程度都是很好的,作者也预留了许多插件接口。在 “_config.yml” 文件中把 deploy 上面的 “theme” 改成主题名就好了。然后去:C盘 --> User --> <你的用户> --> “.ssh” 文件夹找到这个文件。输入 “hexo s” 会弹出一个网址,按 “Ctrl + C” 输入新命令。在 “blog” 文件夹中右键选择 “Git Bash Here”。点击右上角 “+” 号,选择 “New repository”。
2024-08-31 11:36:33 689
原创 从零开始学习C++之递推
相对于递归算法,递推算法免除了数据进出栈的过程,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值。递推算法是一种简单的算法,递推通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。看的处理,递推是线性算法,时间复杂度明显更低。很明显,递推效率更高。
2024-08-28 07:54:03 594
原创 从零开始学习C++之结构体
之前讲过变量,讲了数据类型(如 int 等),而结构体就相当于创造一个类型。首先,写上一个神圣不可侵犯的(bushi)struct。好了,不开玩笑了。在程序外围定义(一般写在命名空间后面)。struct 名字 {含有的东西。一定一定要有分号!!!例:定义存储坐标的结构体int x, y;结构体定义好了,我们就可以拿结构体创建数据结构了。以上面的坐标为例,定义一个类型为zuobiaozuobiaozuobiao的变量aaazuobiao a;就完事了,神不神奇。。
2024-08-24 16:47:07 720
原创 从零开始学习C++之函数
作者看着 200 行的主函数大模拟返回了 WA,陷入了沉思…咋办?把每个模块包装一下就知道哪里出错了,所以,今天讲函数。(太生硬了吧。。。返回值类型 函数名(变量 * n) {代码 }注:定义函数中的每个变量必须重新写类型,禁止。函数返回值类型和变量一样,如果你不想返回东西可以写void类型。但是,所有函数必须有返回值,即便是void类型也要在函数结束处写上return;。
2024-08-24 16:46:27 274
原创 C++ 编译器配置
下载完后,打开编译器,进行配置 C++11(不配置的话以后很多功能用不了)。C++ 是一个很有意思和富有逻辑的语言,祝你在学习 C++ 的过程中开心!其中,最适合新手和作者最喜欢的是 Dev-C++,我们来下载编译器。这样就配置好了,准备好开始你的 C++ 之旅了吗?简单了解一下后,我们来下载 C++ 编译器环境。点击后选择语言然后通过你自己的需求选择下载即可。然后进入【连接器】部分,将【产生调试信息】选为。要先学习 C++,我们要先了解 C++ 是什么。首先到下面这个网站下载安装程序。
2024-08-24 16:35:58 207
原创 从零开始学习C++之编译器下载
下载完后,打开编译器,进行配置 C++11(不配置的话以后很多功能用不了)。C++ 是一个很有意思和富有逻辑的语言,祝你在学习 C++ 的过程中开心!其中,最适合新手和作者最喜欢的是 Dev-C++,我们来下载编译器。然后进入【连接器】部分,将【产生调试信息】选为 `Yes`。简单了解一下后,我们来下载 C++ 编译器环境。点击后选择语言然后通过你自己的需求选择下载即可。要先学习 C++,我们要先了解 C++ 是什么。在【语言标准】中选择 `ISO C++11`。- C++ 是 C 语言的扩展升级版。
2024-08-24 16:32:19 179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人