C++算法
文章平均质量分 91
conti123
一只学习OI的蒟蒻
展开
-
【网络流】——初识(最大流)
通俗地讲,回到引例,现在有一个问题需要我们去解决:水厂在单位时间内最多能发送多少水给小区?这就是网络流中的一个问题:最大流问题。原创 2024-07-25 09:22:53 · 816 阅读 · 0 评论 -
【算法】决策单调性优化DP
决策单调性,四边形不等式,凸完全单调性,二元函数,DP优化原创 2024-05-22 14:07:37 · 1529 阅读 · 0 评论 -
【算法】状压DP-2
状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1;当然如果有三种状态用三进制来表示也未尝不可。状态压缩DP:顾名思义,就是用状态压缩实现DP。不过呢,对于装压DP来说,不一定是二进制。状压DP主要分为集合式和棋盘式,本文只讨论棋盘式。集合式点这里。对于棋盘式的状压DP,有几种思考方式。每行每行考虑,逆推DP。每列每列考虑,逆推DP。原创 2023-11-28 13:03:13 · 404 阅读 · 0 评论 -
【算法】状压DP-1
状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1;当然如果有三种状态用三进制来表示也未尝不可。状态压缩DP:顾名思义,就是用状态压缩实现DP状压DP主要分为集合式和棋盘式,本文只讨论集合式。原创 2023-11-27 13:33:51 · 1004 阅读 · 0 评论 -
【算法】FFT-1(递归实现)(不包括IFFT)
个数就可以了,问题缩小了一半,而缩小后还能继续缩小,所以我们用类似线段树的分治(递归)来解决它,时间复杂度。但是光有点值还是不够的,我们还要转换为数值,这就是 IFFT。没错,只有后面一坨是相反的,这说明我们可以。高中课本里讲过复数,不过不知道也没关系,这里会讲。但是,当我们把这个多项式看成一个函数时,我们将。接上文复数的知识,每个单位根在复平面上的坐标为。次单位根的每一个根,及方程的每一个解。的每一项相乘,最后累计,时间复杂度。个点的坐标,它们确定唯一的多项式。复数的运算其实跟实数的运算差不多。原创 2023-11-24 13:25:40 · 2362 阅读 · 0 评论 -
【算法】求割点和割边
无向图中所有能互通的点组成了一个连通分量。在一个连通分量中,如果删除某一个点,会把连通分量分为两个或更多,这种点称为割点。在一个连通分量中,如果删除某一条边,会把这个连通分量分成两个,那么这条边称为割边(桥)。通俗的讲,就是在无向图的一个连通块中,删除了一个点/一条边,这个连通块就不连通了,那么这个点/这条边就是割点/割边。原创 2023-09-23 13:38:00 · 699 阅读 · 0 评论 -
【算法】最大子矩阵——非悬线法
首先明确一些概念。1、定义有效子矩形为内部不包含任何障碍点且边界与坐标轴平行的子矩形。如图所示,第一个是有效子矩形(尽管边界上有障碍点),第二个不是有效子矩形(因为内部含有障碍点)。2、极大有效子矩形:一个有效子矩形,如果不存在包含它且比它大的有效子矩形,就称这个有效子矩形为极大有效子矩形。(为了叙述方便,以下称为极大子矩形)3、定义最大有效子矩形为所有有效子矩形中最大的一个(或多个)。以下简称为最大子矩形。【定理1】在一个有障碍点的矩形中的最大子矩形一定是一个极大子矩形。原创 2023-08-17 16:03:22 · 665 阅读 · 0 评论 -
【算法】最大子矩阵——悬线法
悬线法思路:悬线的定义,就是一条竖线,这条竖线要满足上端点在整个矩形上边界或者是一个障碍点。然后以这条悬线进行左右移动,直到移至障碍点或者是矩阵边界,进而确定这条悬线所在的极大矩阵。我们定义hijh[i][j]hij表示点ij(i,j)ij的悬线的长度。(及以点ij(i,j)ij,为边界的最大子矩阵的宽)lijl[i][j]lij表示点ij(i,j)ij的悬线往左最长能延伸到哪。rijr[i][j]rij表示点ij(i,j)ij。原创 2023-08-17 15:42:04 · 697 阅读 · 0 评论 -
【KMP】从入门到理解
Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。以下讲解均为个人理解,如有错误,请各位大佬指正,不喜勿喷。KMP的算法十分巧妙,时间复杂度为OnmO(n+m)Onm,甚至比哈希还好用。原创 2023-08-09 20:18:17 · 120 阅读 · 0 评论 -
【算法】最小生成树-Kruskal
Kruskal算法的思想比Prin好理解一些。先把边按照权值进行排序,用贪心的思想优先选取权值较小的边,并依次连接,若出现环则跳过此边(用并查集来判断是否存在环)继续搜,直到已经使用的边的数量比总点数少一即可。证明:如果某个连通图属于最小生成树,那么所有从外部连接到该连通图的边中的一条最短的边必然属于最小生成树。所以不难发现,当最小生成树被拆分成彼此独立的若干个连通分量的时候,所有能够连接任意两个连通分量的边中的一条最短边必然属于最小生成树。原创 2023-08-07 10:10:36 · 80 阅读 · 1 评论 -
【算法】高精度 +
高精度加法原创 2023-08-07 09:02:29 · 76 阅读 · 1 评论 -
【算法】换根DP~~~蒟蒻的笔记
基于树上dp的基本模型,题目初始不给出根节点,需要遍历每一个根节点,达到某一个根节点的最佳情况给每一个点做一次树形DP,时间复杂度 O(n^2)换根dp主要就是将时间复杂度降到O(n),在根结点切换时,直接通过一些已经计算过的数据在O(1)就能得到另一个根的结果一般是通过二次扫描,第一次dfs获得预处理数据,第二次dfs进行根节点的转换树形DP所以,换根DP的本质是树形DP,只不过是多了一个dfs进行根节点的转换。原创 2023-08-05 06:00:00 · 116 阅读 · 1 评论 -
【算法】树形DP
树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上。整体的思路大致就是用树形的结构存储数据。图树/图的遍历树形DP主要分为两类:树形背包和节点递推就像下图一样:树形DP分为子→父和父→子两种,本质是dfs。先找到树根,从树根开始递归,递归到叶子节点为止,把叶子节点的**所求数值**更新完毕,在回溯的时候在更新父亲节点。整个过程是**子→父**。原创 2023-08-04 20:56:42 · 90 阅读 · 1 评论 -
【算法】最近公共祖先(lca)——倍增,tarjan
最近公共祖先是什么意思呢?其实就是对于两个点x和y,如果点t满足既是x的祖先又是y的祖先,同时是离它们最近的共同的祖先,那么t就是x,y的最近公共祖先。如图:a是b,c的最近公共祖先,a是p,q的最近公共祖先。lca就是用来求两点的最近公共祖先的算法。类似二分,O(nlogn)类dfs,常数优化,不过尽量打倍增lca刷题处。原创 2023-07-17 20:28:15 · 334 阅读 · 1 评论