
【算法笔记】合集
文章平均质量分 93
ACM的简单算法总结合集
繁凡さん
只想当个小透明,就图一乐^q^,希望可以做出一些微小的贡献(目前研究方向:自然语言处理、深度学习中的对抗攻击、元学习,欢迎大佬们来与我交流^0^)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ACM 全部算法总结
ACM 所有算法数据结构 栈 队列 链表 哈希表 哈希数组 堆 优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 一维线段树 二维线段树 树状数组 一维树状数组 N维树状数组 字典树 后缀数组 后缀树 块状链表 哈夫曼树 桶 跳跃表 Tr...原创 2020-02-20 08:33:34 · 1803 阅读 · 2 评论 -
【算法笔记】基环树
基环树,也是环套树,是一种有 nnn 个点 nnn 条边的图,简单地讲就是树上在加一条边。它形如一个环,环上每个点都有一棵子树的形式。基环内向树:每个点出度为1(因此每个环上点的子树,儿子指向父亲)基环外向树:每个点入度为1(因此每个环上点的子树,父亲指向儿子)基环树的关键就是找到环,可以先把环当作这个无根树的 “根” ,也就是把环缩点(先不管它),这样一颗基环树就变成了一个普通的树,然后我们先按照解决普通树的方法对“根”的所有子树依次处理求解答案,最后在单独对环上所有的点进行操作求解最终答案即可。原创 2020-10-07 11:12:01 · 3562 阅读 · 3 评论 -
【算法笔记】分块
之前一直不是很喜欢分块所以没学,现在看来分块这种暴力的艺术倒还是很适合我的…分块——暴力的艺术分块算法的思想是通过适当的划分,预处理一部分信息保存下来,用空间换取时间,达到时空平衡。基本操作是,将一段序列,分成一定数量的块,每一块有一个长度,表示一段区间。对于区间操作,通过对完整块的整体操作和对不完整块的暴力操作而使复杂度尽可能的低为了使得其有着最稳定的时间复杂度,我们经常将一个长度为 n 的序列分为 n\sqrt nn 个大小为 n\sqrt nn 的块,如果 n 不是完全平方数,则序列最右端原创 2020-11-04 21:08:52 · 1388 阅读 · 0 评论 -
置换群和Burnside引理,Polya定理
定义简化版:置换,就是一个1~n的排列,是一个1~n排列对1~n的映射置换群,所有的置换的集合。经常会遇到求本质不同的构造,如旋转不同构,翻转交换不同构等。不动点:一个置换中,置换后和置换前没有区别的排列Burnside引理:本质不同的方案数=每个置换下不动点的个数÷置换总数(一个平均值)Polya定理:一个置换下不动点的个数=颜色^环个数。(辅助Burnside引理,防止枚举不动点复杂度过高) 这篇文章写得很详细了(具体的在此不说了):Burnside引理与Polya...转载 2020-08-08 21:31:41 · 758 阅读 · 0 评论 -
kuangbin带你飞专题合集
[kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶...转载 2020-05-28 16:38:39 · 2296 阅读 · 2 评论 -
0x12.基本数据结构 — 队列与单调队列
目录0.UVA540 团体队列 Team Queue声明:本系列博客是《算法竞赛进阶指南》+《算法竞赛入门经典》+《挑战程序设计竞赛》的学习笔记,主要是因为我三本都买了 按照《算法竞赛进阶指南》的目录顺序学习,包含书中的部分重要知识点、例题答案及我个人的学习心得和对该算法的补充拓展,仅用于学习交流和复习,无任何商业用途。博客中部分内容来源于书本和网络(我尽量减少书中引用),由我个人整理总结(...原创 2020-05-04 12:42:03 · 861 阅读 · 0 评论 -
0x07.基本算法 — 贪心
贪心贪心是一种在每一次决策时都采用当前意义下最优策略的算法,因此,使用贪心算法要求问题的整体最优性可以由局部最优性导出。贪心算法的正确性需要证明,常见的证明手段有:微扰(邻项交换) 证明在任意局面下,任何对局部最优策略的微小改变都会造成整体结果变差,经常用于以排序为贪心策略的证明。范围缩放 证明任何对局部最优策略作用范围的扩展都不会造成整体结果变差。决策包容性证明在任意局面下,做出局...原创 2020-04-28 10:39:05 · 1619 阅读 · 0 评论 -
0x06.基本算法 — 倍增
目录一、倍增0.例题引入1.AcWing 109.Genius ACM(归并+倍增)二、ST算法2.luogu P3865 【模板】ST表声明:本系列博客是《算法竞赛进阶指南》+《算法竞赛入门经典》+《挑战程序设计竞赛》的学习笔记,主要是因为我三本都买了 按照《算法竞赛进阶指南》的目录顺序学习,包含书中的部分重要知识点、例题答案及我个人的学习心得和对该算法的补充拓展,仅用于学习交流和复习,无任...原创 2020-04-24 22:45:06 · 1258 阅读 · 0 评论 -
0x04.基本算法 — 二分和三分
目录二分1.整数域上的二分2.实数域上的二分声明:本系列博客是《算法竞赛进阶指南》+《算法竞赛入门经典》+《挑战程序设计竞赛》的学习笔记的目录,主要是因为我三本都买了 按照《算法竞赛进阶指南》的目录顺序学习,包含《算法竞赛进阶指南》的重要知识点、例题答案及我个人的学习心得和对该算法的补充拓展,仅用于学习交流。博客的内容大多都来源于《算法竞赛进阶指南》和网络(习题和代码可都是我自己敲哒) ,如果...原创 2020-04-23 12:37:00 · 1731 阅读 · 1 评论 -
算法竞赛知识合集 目录(博客中转站)
《算法竞赛进阶指南》,跟着我学完这本书,你即可获得NOIP500分以上的能力或者得到ACM-ICPC金牌爷的实力!原创 2020-04-18 18:45:22 · 12199 阅读 · 5 评论 -
0x03.基本算法 — 前缀和与差分
目录一、前缀和二、二维前缀和(1)二维前缀和(2)二维前缀和的修改和求和0. NOI 2003激光炸弹(二维前缀和)1.牛妹吃豆子(二维前缀和模板,修改+求和)三、差分本文是《算法竞赛进阶指南》+《算法竞赛入门经典》+《挑战程序设计竞赛》的学习笔记,主要是因为我三本都买了 按照《算法竞赛进阶指南》的目录顺序学习,至少包含《算法竞赛进阶指南》的每一节的重要知识点和全套例题答案,和《算法竞赛入门经典...原创 2020-04-20 22:05:37 · 1364 阅读 · 1 评论 -
最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)
目录最长上升子序列一、朴素做法O(2n)O(2^n)O(2n)二、优化做法O(nlogn)O(nlogn)O(nlogn)三、例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列)1.朴素做法暴力O(n2)O(n^2)O(n2)2.树状数组优化O(nlogn)O(nlogn)O(nlogn)3.二分优化O(nlogn)O(nlogn)O(nlogn)四、P4309 [TJOI2013...原创 2020-04-12 13:10:43 · 4603 阅读 · 2 评论 -
最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录最长公共子序列(LCS)问题1.朴素做法 O(n2)O(n^2)O(n2)2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn)3.P2758 编辑距离最长公共子序列(LCS)问题给出两个⻓度为n的序列{ai}和{bi}\{a_i\}和\{b_i\}{ai}和{bi},求它们的公共子序列的最⻓⻓ 度。 例如两个序列分别为(1,2,4,8,16)(1,2,4,8,16)(1...原创 2020-04-12 17:29:40 · 1963 阅读 · 0 评论 -
离散化详解(两种方法)
离散化在一些问题中,我们只关心 n 个数字之间的相对大小关系,而不关心它 们具体是多少。因此,我们可以用一种叫离散化的技术来将数字映射到 1 ∼ n 的整数, 从而降低问题规模,简化运算。通常的实现方法是将所有数字排序,然后再重新遍历一遍所有的数字, 通过二分查找找到它们的 “排名”,然后用排名来代替对应的数字。#include<iostream>#include<st...原创 2020-04-09 20:30:08 · 10851 阅读 · 7 评论 -
【树形DP】树形DP入门详解+例题剖析
树形DP树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上。整体的思路大致就是用树形的结构存储数据。要学树形DP之前肯定是要先学会树和图的呀,至少先学会链式前向星,不会的话可以看一下我之前写的博客链接:【图论】图,实现图(三种方式),二分图 详解树形DP的关键和实现方法是dfsdfsdfs。先找到树根,从树根开始运用 dfsdfsdfs 递归,跟dfsdfsdfs一样先初始化...原创 2020-04-06 21:50:24 · 18712 阅读 · 13 评论 -
倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析
目录一、倍增算法二、倍增算法的应用:求LCA(最近公共祖先)附模板题三、倍增算法的应用:RMQ 问题(ST表)附模板题一、倍增算法要了解倍增之前,建议先看一下大佬的博客:【白话系列】倍增算法看完以后相信你已经对倍增有了大致初步的了解,下面给出倍增的定义(其实没什么用,好长一段话建议不看)倍增 从字面的上意思看就是成倍的增长 ,这是指我们在进行递推时,如果状态空间很大,通常的线性递推无法满...原创 2020-04-03 23:25:44 · 13617 阅读 · 7 评论 -
【数据结构】堆,大根堆,小根堆,优先队列 详解
堆要了解堆之前,请先了解树,因为堆是一颗完全二叉树如果不知道的话请点击下方链接了解树,二叉树,完全二叉树详解要注意的是首先堆是一颗完全二叉树其次堆中存储的值是偏序Min-heap(小根堆): 父节点的值小于或等于子节点的值Max-heap(大根堆): 父节点的值大于或等于子节点的值好吧其实就是实现自动排序O(logn)时间复杂度内实现插入,删除,O(1)查询1....原创 2020-02-24 20:39:27 · 14245 阅读 · 0 评论 -
【学习笔记】树的计数,prufer(Prüfer)编码,Cayley公式及相应例题
目录1、pruferpruferprufer编码1)无根树转化为prufer序列2)prufer序列转化为无根树。2、Cayley公式1)由Cayley公式得到四个推论例题1、P4981 父子例二、P4430 小猴打架部分来自大佬的博客,加入一些自己的理解。1、pruferpruferprufer编码首先引入pruferpruferprufer编码(其实是Pru¨ferPrüferPru¨f...原创 2020-03-29 22:14:37 · 2341 阅读 · 1 评论 -
【状压DP】状态压缩动态规划入门超详解
状压DP一、概述1.状态压缩2.使用条件3.状压DP二、位运算三、例题引入入门例题【例1】填满棋盘入门例题【例二】玉米地感觉好多讲状压DP的博客都有点乱,我就结合各路大佬的博客,加上我自己的理解,总结出一篇博客来,供初学者参考一、概述1.状态压缩状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的...原创 2020-03-15 13:19:10 · 10276 阅读 · 9 评论 -
最短路合集(Dijkstra、SPFA、Floyd以及路径还原模板)
目录一.Dijkstra算法1.堆(优先队列)优化版本:(慢,占用内存还大)2.线段树优化版本:(超快的)二.SPFA 算法三.Floyd算法一.Dijkstra算法4 6 11 2 22 3 22 4 11 3 53 4 31 4 40 2 4 31.堆(优先队列)优化版本:(慢,占用内存还大)#include<bits/stdc++.h>usin...原创 2020-02-26 19:39:46 · 1863 阅读 · 0 评论 -
【图论】图,实现图(三种方式),二分图 详解
目录一.图的基本概念1.度2.连通(1)连通图(2)强连通/强连通图3.回路4.完全图二. 邻接矩阵实现图三.邻接表实现图四.链式前向星实现图五. 二分图1.简单应用—二分图的判定2.P1155 双栈排序(二分图的染色判断+链式前向星)一.图的基本概念图(graph)并不是指图形图像(image)或地图(map)。通常来说,我们会把图视为一种由“顶点”组成的抽象网络,网络中的各顶点可以通过“边...原创 2020-02-25 21:11:36 · 7077 阅读 · 2 评论 -
树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)
目录树和二叉树一.树2.有序树和无序树3.森林4.树的基本性质二.二叉树的概念1.二叉树和度为2的有序树的区别:2.满二叉树3.完全二叉树:4.平衡二叉树:5.二叉树的遍历1.先序遍历(1)递归写法(2)先序非递归写法2.中序遍历3.后序遍历UVA548 树 Tree(通过中序遍历和后续遍历建树)4.层序遍历UVA122 树的层次遍历 Trees on the level(两种方法详解)6.二叉树...原创 2020-02-24 12:02:35 · 5554 阅读 · 1 评论 -
【算法】BFS刷题总结
姊妹篇(DFS)原创 2019-12-22 21:23:09 · 610 阅读 · 0 评论 -
【算法】并查集刷题总结
P1396 营救题目描述“咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门……妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小明被带到了t区,而自己在s区。该市有m条大道连接n个区,一条大道将两个区相连接,每个大道有一个拥挤度。小明的妈妈虽然很着急,但是不愿意拥挤的人潮冲乱了她优雅的步伐。所以请你帮她规划...原创 2019-12-19 21:59:29 · 555 阅读 · 0 评论 -
【算法】DFS 刷题总结
这可是个大工程,慢慢学,以后把刷到的相关题全部总结下来,写下思路和教训,供以后复习使用。深搜染色例题1:单词方阵给一n×nn \times nn×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 888 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词...原创 2019-12-03 12:31:27 · 1673 阅读 · 0 评论 -
【算法】动态规划+“背包九讲”原理超详细讲解+常见dp问题(9种)总结
背包九讲原创 2019-12-08 11:53:18 · 6103 阅读 · 8 评论 -
线段树 从入门到进阶(超清晰,简单易懂)
目录第一部 概念引入第二部 简单(无pushdown)的线段树1、单点修改,区间查询2、区间修改,单点查询第三部 进阶线段树第四部 乘法(根号)线段树1、乘法线段树2、根号线段树模板题与代码:单点修改,区间查询:洛谷树状数组模板1区间修改,单点查询:洛谷树状数组模板2区间加法,洛谷线段树模板1区间乘法:洛谷线段树模板2区间根号,bzoj3211线段树是什么??线段树怎么写??如果你在考提高组前...转载 2020-02-12 11:08:57 · 109224 阅读 · 141 评论 -
【动态规划】数学期望/概率DP/期望DP详解
期望DP概述规律全概率公式例题1.UVA11021 Tribles麻球繁衍2.算概率(简单,数论)概述一般来说,概率DP找到正确的状态定义后,转移是比较容易想到的。但状态一定是“可数”的,把有范围的整数作为数组下标。事实上,将问题直接作为状态是最好的。如问“n人做X事的期望次数”,则设计状态为f[i]表示i个人做完事的期望。转移一般是递推,即从上一个状态转移得(填表)或转移向下一个状态(刷表)...原创 2020-02-12 10:18:41 · 10315 阅读 · 1 评论 -
汉诺塔原理超详细讲解+变式例题
目录一.汉诺塔详解1.详解2.完整代码二.汉诺塔公式:ans=2^n^-11.例题:P1760 通天之汉诺塔三.变式1:牛牛的汉诺塔四.变式2:P4285 [SHOI2008]汉诺塔一.汉诺塔详解1.详解汉诺塔汉诺塔在汉诺塔游戏中,有三个分别命名为A、B、C得塔座,几个大小各不相同,从小到大一次编号得圆盘,每个原盘中间有一个小孔。最初,所有得圆盘都在A塔座上,其中最大得圆盘在最下面,然后...原创 2020-02-10 17:38:44 · 16902 阅读 · 5 评论 -
【算法】分治算法
分治算法:一、基本概念二、基本思想及策略三、分治法使用场景五、分治法的复杂性分析六、可使用分治法求解的一些经典问题(1)二分搜索(2)大整数乘法(3)Strassen矩阵乘法(4)棋盘覆盖(5)合并排序(6)快速排序(7)线性时间选择(8)最接近点对问题(9)循环赛日程表(10)汉诺塔)一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题...原创 2020-02-09 20:19:27 · 787 阅读 · 0 评论 -
【基础算法】二分法(二分答案,二分查找),三分法,Dinkelbach算法,算法详解+例题剖析
二分法例题1.二分法是一种快速寻找元素的方法,但又不是一种单纯的快速寻找的方法,其寻找的元素是需要一个单调有序的元素,所以在题目中如果遇到了需要排序然后寻找的,我们可以首要考虑二分法,前提是对于世界没有要求,二分法可以很迅速的找到我们所找到的元素。二分法的实现方式是:先将一串元素分为左右两部分,然后用中间值与所需值比较,若中间值较小,那么便取中间值与右边的边界的中间值,继续与所需值比较。...原创 2019-10-24 21:52:00 · 3300 阅读 · 4 评论 -
算法_棋盘型高维动态规划
三维DPP1006 传纸条题目描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个 m 行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标 (1,1),小轩坐在矩阵的右下角,坐标 (m,n)。从小渊传到小轩的纸...原创 2019-12-31 19:36:55 · 693 阅读 · 0 评论 -
算法——矩阵算法
目录一.矩阵快速幂(1)矩阵定义(2)加法运算(3)减法运算(4)数乘P3390 【模板】矩阵快速幂二.矩阵求斐波那契数列一.矩阵快速幂(1)矩阵定义什么是矩阵运算呢?在理解这个问题前,我们先要知道什么是矩阵百度百科给的定义如下矩阵是一个按照长方阵列排列的复数或实数集合复数实数什么的我们先不管,总之,矩阵就是一堆数,按照矩形排列形成的集合那么,我们所需要记录的也就是它的长、宽以...原创 2020-02-03 22:07:50 · 9190 阅读 · 0 评论 -
位运算详解+竞赛常见用法总结
目录位运算1.快速幂2.给定一个数组A, 长度为n,求下面这段程序的值3.数数字4.数数字 25.nim博弈问题:6.树状数组7.判断一个数x是不是2的某次方神殿位运算程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制...转载 2020-02-01 17:14:22 · 3049 阅读 · 0 评论 -
位运算详解
按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、线性基位运算简介及实用技巧(一):基础篇原创 2020-01-31 20:04:47 · 275 阅读 · 0 评论 -
C++ 基础知识总结
C转C++ ?这一篇就够了有C语言的基础,看完这一篇包你熟练掌握C++原创 2020-01-26 12:01:32 · 3234 阅读 · 0 评论 -
排序算法—sort(),stable_sort(),merge()
排序目录:一.sort()二.stable_sort()三.merge()1.merge函数的作用:2.为什么引入归并排序merge()函数3.代码4.例题P1309 瑞士轮一.sort()cppreference中的详细解释二.stable_sort()stable_sort()遇见大小相同的值不会改变他们的位置cppreference中的详细解释三.merge()cpprefer...原创 2020-01-27 18:49:00 · 600 阅读 · 0 评论 -
【数论】数论基础合集
定义:费马小定理(Fermat Theory)是数论中的一个重要定理,其内容为: 假如p是质数,且Gcd(a,p)=1,那么 a(p-1) ≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。题目:给定一个方程式f(x)=5x13+13x5+kax,给定一个非负整数k,求能不能找到一个尽量小的非负整数a,使得上述方程...原创 2019-12-11 21:52:52 · 864 阅读 · 0 评论 -
【算法】差分与前缀和 算法详解+例题剖析
例题一:差分+前缀和+贪心P3406 海底高铁题目背景大东亚海底隧道连接着厦门、新北、博艾、那霸、鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成。凭借该隧道,从厦门可以乘坐火车直达台湾、博艾和日本,全程只需要4个小时。题目描述该铁路经过N个城市,每个城市都有一个站。不过,由于各个城市之间不能协调好,于是乘车每经过两个相邻的城市之间(方向不限),必须单独购买...原创 2019-12-27 21:36:35 · 1709 阅读 · 3 评论 -
【数据结构】树状数组 例题剖析
模板题题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上 x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 m 行每行包含 3 个整数,表示一个操作,具体如下:1 x k 含义:将第 x 个数加上 k2 x y 含义:输出区...原创 2020-01-11 11:18:28 · 690 阅读 · 0 评论