随笔分类 - 知识点总结
摘要:AC自动机 AC 自动机可以理解为在多个串上的 KMP,利用 Trie 树来维护这些串,nxt 数组变为 fail 指针。 fail 指针的构造思想如下: 考虑 Trie 树中当前的节点 \(u\),\(u\) 的父节点是 \(p\),\(p\) 通过字符 \(c\) 的边指向 \(u\),即 \(
阅读全文
摘要:可持久化线段树 可持久化 可持久化数据结构总是可以保留每一个历史版本,并且支持操作的不可变特性。 对于这个说法,我表示非常赞同,因为可持久化的标志就是在修改的过程中仍然可以保持原子树的性质,对于直接全局更改,倒不如把原来的一部分留下,用新的空间来记录当前更改后的值,只改我们需要得到那一部分,因此我们
阅读全文
摘要:点分治 核心思想:通过对路径上的点进行分类,分成两类查询,适用于大规模进行路径操作 我们考虑对于一棵树来说,可以把边分成两类,一类是过根节点的边,一类是不过根节点的边 我们考虑第一类比较容易,无论是统计答案还是找到这条边都很容易 但是第二类捏? 我们发现这些不过根节点的边必然是是属于其中的一个子树的
阅读全文
摘要:扫描线 焯,我tm以为这玩意很高深,看了半天,tm很简单 核心就是我们要求一堆矩形的面积并or周长和,直接标记vis的话,我们的数组得开到 \(10^9 \times 10^9\) 但是我们发现,其实我们可以找一条竖直方向的线从左侧扫到右侧,那么我们就不需要考虑那么多了,我们只需要知道当前段是否为1
阅读全文
摘要:网络流 基本性质 网络:一张带权有向图,有源点和汇点,源点可以无限提供流量,中间的每个点不产生新流量,但是会用一个流量上限(容量),要求源点只有流出的流,汇点只有流入的流,这样的图被称作网络流 同时根据网络的定义,我们也可以引申出其他名词的定义 源点:只有流出流的点 汇点:只有流入流的点 流量:一条
阅读全文
摘要:简单数学 常见概念和符号 数论常见符号 整除符号 $x\mid y$,表示 $x$ 整除 $y$ ,即 $x$ 是 $y$ 的因数 取模符号 $x \bmod y$ ,表示 $x$ 除以 $y$ 以后的余数 互质符号 $x~\bot~y$ ,表示 $x$ ,$y$ 互质 最大公约数 $\gcd(x,
阅读全文
摘要:转自知乎 动态规划的本质不在于是递推或是递归,也不需要纠结是不是内存换时间。 理解动态规划并不需要数学公式介入,只是完全解释清楚需要点篇幅…首先需要明白哪些问题不是动态规划可以解决的,才能明白为神马需要动态规划。不过好处时顺便也就搞明白了递推贪心搜索和动规之间有什么关系,以及帮助那些总是把动规当成搜
阅读全文
摘要:对拍 步骤: 1.先写出自己的代码并运行 2.写出暴力代码并运行 3.写随机数生成器 #include<cstdlib> #include<ctime> #include<algorithm> #include<iostream> #include<cstring> #include<cstdio>
阅读全文
摘要:#pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GC
阅读全文
摘要:树链剖分 要求 已知一棵包含 N 个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 1 x y z,表示将树从x到y结点最短路径上所有节点的值都加上z。 2 x y,表示求树从x到 y 结点最短路径上所有节点的值之和。 3 x z,表示将以x为根节点的子树内所有节点值都加上z。
阅读全文
摘要:#manacher算法 这个算法我相信绝对是比kmp好理解多了 含义 首先看manacher算法的含义: 洛谷P3805 模板manacher算法 给出一个只由小写英文字符 a,b,c,d,e……z 组成的字符串 S ,求 S 中最长回文串的长度 。 字符串长度为 n。 初步构想 暴力匹配,每一个位
阅读全文
摘要:扩展KMP 写在开头 这里的大多数思路都属于泥土笨笨,感觉这篇真的讲的很好,大家可以去看看 先挖个坑,晚上填好
阅读全文
摘要:区间DP 什么是区间 DP 区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。令状态$f_{i,j}$表示将下标位置$i$到$j$的所有元素合并能获得的价值的最大值,那么 ,$max(f_{i,k}+f_{k+1,j}+co
阅读全文
摘要:背包 问题:有n个物品,每个重量为vi,权值为wi,每个物品仅用一次,问在背包容量为W里能装的最大价值 01背包 核心特点:每件物品最多只能用一次 集合条件: 核心:不漏下任何一个 1.只从前i个物品中选 2.总体积$\le$V 属性:Max $f_{i,j}$据上面的假设,意义应该是在前i个物品,
阅读全文
摘要:KMP算法 前提介绍 KMP算法是一种看模式串在主串中出现次数的优化算法 复杂度为O(n+m) 这个算法理解了不难,不理解只背模板早晚会挂,而且容易忘,建议从头到尾一步一步看完 为了方便描述,我们把S作为子串,T作为模式串,然后下标一定要从1开 设len1为长串,len2为模式串(即短串) 本讲解是
阅读全文
摘要:矩阵 矩阵的定义: 一个n*m的矩阵可以看作是一个二维数组 设A是$n * m$矩阵,B是 $m * p$矩阵 则C就是$n * p$ 矩阵 并且 \[ \sum _{k=1}^{m} A_{i,k}*B_{k,j} \] 矩阵乘法满足结合律,即$(A*B)*C$ =\(A*(B*C)\) 满足分配
阅读全文
摘要:栈和队列 此处均为用数组模拟(因为懒) 实际上是因为STL里的栈和队列常数太大 ,不如用数组模拟,而且能做的事也比STL多 栈: 先进后出(可以理解成一个坑 int stk[N],tt; skt[++tt]=x;//入栈 tt--;//弹出 if(tt==0) return empty; else
阅读全文
摘要:哈希算法基础 字符串哈希本质上来说就是把每个不同的子串换成一个整数,然后查询两个字符串是否相同时只需要查明两个字符串的哈希值是否相等就行 hash公式 const int base=10; const int p1=1610612741; const int p2=805306457; char s
阅读全文
摘要:线段树 一种我琢磨了很长时间才明白的数据结构 核心思想就是把一个序列,分成一个二叉树,叶子节点存的是每个元素,能够快速修改或访问区间中的数值,功能♂强大 线段树主要分为下面几步: push_up操作 void push_up(int p){ tree[p]=tree[lc(p)]+tree[rc(p
阅读全文
摘要:树形结构 树是数据结构与算法中一种非常重要的结构,是由N个具有层次的结点组成,其具有以下特点: (1)有一个根结点,一般称为root结点 (2)每一个元素称为node (3)除了root结点外,其余结点会被分为n个互不相交的集合,即n个互不相交的子树 树形结构基本名词: (1)结点:node,树形结
阅读全文

浙公网安备 33010602011771号