拓扑排序 概述拓扑排序是图论中的一种重要算法,用于对有向无环图(DAG)进行排序。在拓扑排序中,图中的节点被排序,使得如果图中存在一条从节点 A 到节点 B 的有向路径,那么在排序结果中,节点 A 出现在节点 B 之前。 拓扑排序常用于解决一些实际问题,例如任务调度、依赖关系分析等。在项目管理中,如果任务之间存在先后顺序的依赖关系,那么可以利用拓扑排序确定任务的执行顺序,以保证任务能够按照依赖关系的要求顺利 2024-04-12 算法 #图论 #拓扑 #BFS
算法模板 总览 [[#基础算法]] [[#前缀和与差分]] [[#二分]] [[#数据结构]] [[#并查集]] [[#普通并查集]] [[#带权并查集]] [[#拓展域并查集]] [[#树状数组]] [[#图论]] [[#最小生成树]] [[#Kruskal算法]] [[#全源最短路]] [[#Djkstra堆优化(正权稀疏图)]] [[#Djkstra(正权稠密图)]] [[#Be 2024-03-15 算法模板 #算法
树状数组 树状数组说明普通树状数组维护的信息及运算要满足 结合律 且 可差分,如加法(和)、乘法(积)、异或等。需要注意的是: 模意义下的乘法若要可差分,需保证每个数都存在逆元(模数为质数时一定存在); 例如$gcd,max$ 这些信息不可差分,所以不能用普通树状数组处理,但是 使用两个树状数组可以用于处理区间最值,详情见volume9.pdf (te.lv) 对于不可差分的 2024-03-14 算法 #数据结构 #树状数组
日期处理 日期数组方便查询每个月的天数 1int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 判断闰年被400整除 或者 被4整除的同时不被100整除 123456int is_leap(int year){ if (year % 4 == 0 && year % 100 || y 2024-03-13 基础知识 #日期
简单配置VScodeC or Cpp环境 下载VScode下载链接Visual Studio Code - Code Editing. Redefined 注意一下最后一项,必须是勾 - 添加到PATH 安装mingw64到mingw64官网MinGW-w64点进SourceForge,进去下载对应版本就行。保存到本地一个不会忘记的地方。 配置环境变量win + Q 搜索环境变量 点击环境变量进入编辑Path新建一个,路径就填写刚刚下载 2024-03-05 vscode #vscode #cpp
LCA最近公共祖先 概述LCA(Lowest Common Ancestor,最近公共祖先)是树结构中常用的一个问题,指的是树中两个节点的最低共同祖先节点。LCA树链抛分法和倍增法,我们这里讲述倍增法,倍增法是一种高效解决LCA问题的算法之一,通过预处理和动态规划的方式,可以在较快的时间内回答多次LCA查询。 算法步骤 预处理: 算法首先对树进行预处理,计算每个节点的深度和其与2的幂次方祖先的关系。 构建倍增表: 2024-01-27 算法 #algorithm #图论 #lca #倍增
筛质数 概念质数(素数)是指在大于1的自然数中,除了1和它本身之外没有其他正因数(除了1和本身以外没有其他能够整除它的正整数)。换句话说,一个质数只能被1和自身整除,不能被其他任何正整数整除。 试除法求质数试除法是一种简单而直观的方法,用于确定一个数是否是质数。该方法的基本思想是通过逐一尝试除以小于该数平方根的所有可能因数,来检查是否存在除了1和该数本身之外的其他因数。如果找到了一个能够整除的因数,那么这 2024-01-23 算法 #algorithm #数论 #primes
组合计数 概念组合计数是指在一个集合中选择一定数量的元素,而不考虑元素的顺序。在C++中,可以使用组合计数来解决各种组合问题,例如从一组元素中选择固定数量的元素。组合计数通常涉及到计算二项式系数(n choose k),其中 n 表示总的元素数量,k 表示要选择的元素数量。 实现组合计数公式的展开可以通过阶乘的定义来实现。组合数 $C(n,k)$ 可以用以下公式示:组合计数公式的展开过程: $C(n, k) 2024-01-23 算法 #algorithm #数论 #组合数
快速幂 引入如何求解$a^{13}$怎么算,这个问题可能看着很简单,直接$aaa*…*a$就能算出来,但是如果这个指数如果变得非常大,比如$a^{100000}$ 这样写出来的代码运行起来就很慢,我们需要考虑优化。 先考虑$a^{2的幂}$如果要求解$a^{64}$,我们可以发现$a*a$得到$a^2$再使用$a^2 * a^2$得到$a^4$,以此类推,我们可以花费很少的次数得到$a^{64}$。 推广 2024-01-22 算法 #algorithm #数论
算法总览 前言本站算法总览,不是超链接的即为还未更新。 基础算法 前缀和与差分 二分法 数据结构 并查集 带权并查集 拓展域并查集 树状数组 线段树 图论 图论基础 Dijkstra算法 SPFA算法 Floyd算法 Kruskal算法 拓扑排序 LCA最近公共祖先 数论 GCD与LCM 快速幂 组合计数 筛质数 欧拉函数 拓展欧几里得 动态规划 背包 线性DP 区间DP 树形DP 记忆化搜索 状压 2024-01-21 算法 #algorithm
GCD与LCM 最大公约数(GCD)最大公约数,也称为最大公因数或最大公因子,是两个或多个整数共有的最大正整数。通常用符号 $\text{gcd}(a, b)$ 表示,其中 $a$ 和 $b$ 是整数。最大公约数有广泛的应用,例如简化分数、判断两个数的互质性等。 整除的定义:$a$ 能整除 $b$,记为 $a|b$。其中,$a$ 和 $b$ 为整数,且 $a \neq 0$,$b$ 是 $a$ 的倍数,$a$ 是 2024-01-21 算法 #algorithm #数论 #gcd #lcm
带修莫队 简述在学习带修莫队之前,请务必学会普通莫队。 带修莫队即为: 普通莫队是不能修改的,我们可以强行让它可以修改,加上一维时间维,表示这次操作的时间。 时间维表示经历的修改次数。 即把询问$[l,r]$变成$[l,r,time]$,那么因为多了一维,我们对应的操作也会增加 $[l-1,r,time]$ $[l+1,r,time]$ $[l,r-1,time]$ $[l,r+1,time]$ $[l, 2024-01-20 算法 #algorithm #杂项