算法
不想悲伤到天明
这个作者很懒,什么都没留下…
展开
-
放苹果HJ61
动态规划入门题目原创 2023-02-27 21:02:14 · 427 阅读 · 0 评论 -
强连通分量(Tarjan算法)
强连通分量 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。 Tarjan 算法是基于对图优先搜素的算法 , 每个强连通分量为搜索树中的一棵子树...原创 2019-02-22 16:28:26 · 7728 阅读 · 3 评论 -
树状数组(入门)
转发自https://www.cnblogs.com/acgoto/p/8583952.html写的比较不错树状数组的问题模型首先我们搞明白树状数组是用来干嘛的,现在有一个这样的问题:有一个数组a,下标从0到n-1,现在给你w次修改,q次查询,修改的话是修改数组中某一个元素的值;查询的话是查询数组中任意一个区间的和,w + q < 500000。这个问题很常见,首先分析下朴素...转载 2019-01-25 21:19:24 · 243 阅读 · 0 评论 -
ST 算法
在RMQ问题(区间最值问题) 中 , ST 算法就是倍增的产物 。给定一个长度为N的数列 A ,ST算法能在时间的预处理后,以O(1)的时间复杂度在线回答" 数列 A 中下标在 l ~ r 之间最大的值是多少" ,这样的区间最值问题 。设表示数列A 中下标在子区间里的数的最大值 ,也就是从 i 开始的个数的最大值。递推边界显然是 , 即数列 A 在子区间 [ i,j ] 里的最...原创 2019-05-15 22:03:17 · 2043 阅读 · 0 评论 -
倍增
倍增, 从字面的上意思看就是成倍的增长 ,这是指我们在进行递推时,如果状态空间很大,通常的线性递推无法满足时间和空间复杂度的要求 ,那么我们就可以通过成倍的增长,只递推状态空间中在 2 的整数次幂位置上的值作为代表 。当需要其他位置上的值时,我们只需要通过" 任意整数可以表示成若干个2 的 次幂项的和 " 这一性质(13 = 2^3 + 2^2 +2^0 ), 使用之前求出的代表值拼成所需的值。...原创 2019-05-10 16:37:46 · 2031 阅读 · 0 评论 -
前缀和
对于一个给定的数列 A, 它的前缀和数列S 是通过递推能求出来得 部分和,即数列A中某个下标区间内的数的和,可以表示为前缀和相减的形式: 代码: for(int i = 1...原创 2019-02-07 10:59:08 · 21620 阅读 · 6 评论 -
数位dp入门(转载)
转载https://blog.csdn.net/wust_zzwh/article/details/52100392基础篇数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数。所谓数位dp,字面意思就是在数位上进行dp咯。数位还算是比较好听的名字,数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦!之所以要引入数位的概念完全...转载 2019-01-27 11:55:47 · 133 阅读 · 0 评论 -
最小表示法
给定一个字符串 S[1~n] , 如果我们不断的把它的最后一个字符放到开头,最终会得到 n 个字符串, 称这 n 个字符串是循环同构的。这些字符串中字典序最小的称为 字符串 S 的最小表示 。 例如 "abca" , 它的4个循环同构字符串为 "abca" , "aabc" , "caab" , "bcaa" . S 的最小表示是 "aabc" .因为一个与 S...原创 2019-06-01 22:24:46 · 229 阅读 · 0 评论 -
LCA 最近公共祖先
参考:https://www.cnblogs.com/JVxie/p/4854719.html首先是最近公共祖先的概念(什么是最近公共祖先?):Tarjan/DFS+ST/倍增 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 ...原创 2019-06-02 19:37:34 · 258 阅读 · 0 评论