笔记
文章平均质量分 81
某typedef
这个作者不懒,什么都没留下…
展开
-
树形DP&环形和后效性处理
树形dp概念依然是O(n)O(n)O(n)类型的dp,通过dfs或bfs实现小状态向大状态的转移,本质是在树上更方便表示的线性动规例题P2014 [CTSC1997]选课是做过的题,就不详细说了树上的分组背包POJ3585从树上选取一个源点作为根,每条边都有一个容量,该树对应的叶子结点为汇点问应当选取哪个点为源点,该树的流量最大朴素算法:枚举每个点作为源点,用树形dp求出最大流量也就是从下往上取mind[x]表示以xxx为根的子树所得的最大流量d[x]=∑y∈son(x){mi原创 2021-05-31 21:48:56 · 204 阅读 · 0 评论 -
网络流笔记
网络流持续更新中…几句话网络流的思维方式类似DP一般来说做题流程为:题意分析建图默写板子其中建图是关键,类似DP中的转态表示,状态转移概念流网络一张有向图,有两个特殊的点,源点(S)(S)(S),汇点(T)(T)(T)边权表示该边容纳流量的最大值G=(V,E)G=(V,E)G=(V,E)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MLunYZb1-1620460456314)(C:\Users\Typedef\Pictures\截图\w原创 2021-05-08 15:55:06 · 131 阅读 · 0 评论 -
莫队
莫队优雅的暴力用法在nnn\sqrt{n}nn的时间内离线求解一段区间内不同数字的个数实现暴力做法:用一个桶记录每种颜色出现的数量随后扫描桶,进行统计显然会超时我们对询问进行排序,以便利用前一个询问的信息更新下一个询问我们建立双指针,每次移动指针加入新数这便是莫队算法的雏形(是暴力,但不优雅)很容易发现我们刚才的做法仍然是O(n)O(n)O(n)的,并没有得到优化通过调整查询的顺序,我们可以把复杂度降到O(n)O(\sqrt{n})O(n)我们通过排序,可以使得其中一个指针原创 2021-03-08 19:03:38 · 188 阅读 · 0 评论 -
数学基础知识
数学基础知识线性筛略高斯消元通过高斯消元,我们可以再O(n3)O(n^3)O(n3)的时间复杂度内求出线性方程组的解{a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋮an1x1+an2x2+⋯+annxn=bn\begin{cases}a_{11} x_1+a_{12}x_2+\dots+a_{1n}x_n=b_1\\a_{21} x_1+a_{22}x_2+\dots+a_{2n}x_n=b_2\\\vdots\\a_{n1} x_1+a_{原创 2021-03-06 22:06:24 · 244 阅读 · 0 评论 -
2-SAT
2-SAT引入我们有很多个变量,分别为x1,x2,…,xnx_1,x_2,\dots,x_nx1,x2,…,xn每个变量有真假两种情况我们有几个条件,由几个变量或起来,可以添加非,如:x1∪x2∪x3x_1∪ x_2∪ x_3x1∪x2∪x3¬x2∪¬x3∪x4\neg x_2∪\neg x_3∪ x_4¬x2∪¬x3∪x4在SAT问题中,我们求出这些变量的取值,满足许多个这样的条件然而不幸的是,SAT问题是一个NPC问题,我们没有办法在多项式时间内求出解不过,对于2原创 2021-03-05 21:32:02 · 102 阅读 · 0 评论 -
树链剖分
树链剖分用途将任意一条树上路径转化为不超过lognlognlogn段区间将一棵树转化成一个序列这样我们求树上路径和就和以用线段树求复杂度O(log2n)O(log^2n)O(log2n)求法&概念求出每一棵子树的节点个数其中某个点的,所在子树的节点个数最多的那个儿子,被称为该点的重儿子其余的被称为轻儿子子树大小相等时,重儿子可以任选我们预处理出每个子树的size,并求出来所有重儿子我们引入几个概念:重边:连接一个重儿子和它的父节点的边**轻边:**其余的边重链:原创 2021-02-25 22:14:57 · 138 阅读 · 0 评论 -
后缀数组
后缀数组定义后缀是什么就不用说了吧…在后缀数组中,我们把从第i个下标开始的后缀称为第i个后缀(我个人比较习惯字符串下标从1开始)这样一来我们得到n个后缀通过倍增的思想,我们可以再O(nlogn)O(nlogn)O(nlogn)的时间内对这n个后缀按照字典序排序变量名:sa[i]:表示排名第i的后缀是第几个后缀rk[i]表示第i个后缀的排名是多少height[i]表示sa[i]与sa[i-1]的最长公共前缀(LCP)举个例子:字符串aababb的后缀分别是:aababbaba原创 2021-02-23 18:26:14 · 97 阅读 · 0 评论 -
板子
splay/************************************************************************* > File Name: splay.cpp > Author: typedef > Mail: 1815979752@qq.com > Created Time: 2021/2/13 19:55:00 *******************************************原创 2021-02-21 14:25:03 · 118 阅读 · 0 评论 -
莫比乌斯反演
莫比乌斯反演应该比较清晰易懂吧(雾莫比乌斯函数定义x=p1α1p2α2…pkαk,其中pi是质数,αi是正整数x=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k} ,其中p_i是质数,\alpha_i是正整数x=p1α1p2α2…pkαk,其中pi是质数,αi是正整数μ(x)={case1:存在αi≥2,此时μ(x)=0.case2:所有的αi=1,此时μ(x)=(−1)k.例:μ(6)=1,μ(7)=−1,μ(8)=0.\m原创 2021-02-19 20:17:48 · 96 阅读 · 0 评论 -
Tarjan
重学图论前置芝士强连通:对于点x,y,存在一条x到y,和y到x的路径强连通图:图中每两个点都强联通强联通分量:极大强联通子图都是定义在有向图中的应用:缩点我们对一张图进行DFS,可以得出一颗搜索树对于搜索树上的每一条边,我们都可以归为四类:树枝边(x,z):x是y的父节点前向边(x,y):x是y的祖先节点后向边(x,y):就是前向边反过来横叉边(y,a):连向其他树枝的边(需要注意的是,(y,b)并不是一条横叉边,因为b节点是第一次被访问到,因此就成了树枝边)原创 2020-12-18 22:19:58 · 228 阅读 · 2 评论 -
可持久化数据结构
文章目录可持久化数据结构两句闲话可持久化 TrieTrieTrie实现例题可持久化线段树(主席树)实现例题可持久化数据结构两句闲话可持久化的前提:该数据结构本身的拓扑结构在操作时保持不变常见的可持久化:堆,线段树,树状数组,trie…trie\dotstrie…常见的不支持持久化:平衡树…那么可持久化能解决什么问题呢?保存数据结构的所有历史版本 git暴力备份?肯定不行 MLE+TLE类似于git,可持久化数据结构只会记录每一个版本和前一个版本不一样的地方以线段树为例,每次操作最多原创 2020-11-27 21:35:52 · 410 阅读 · 0 评论 -
树状数组复习
文章目录树状数组复习功能原理操作初始化修改查询应用题意思路代码进阶玩法区间修改,单点查询思路代码区间修改,区间查询思路代码树状数组复习功能快速求前缀和 O(logn)O(logn)O(logn)快速修改某数 O(logn)O(logn)O(logn)原理二进制拆分x=2ik+2ik−1+⋯+2i1x=2^{i_k}+2^{i_{k-1}}+\dots+2^{i_1}x=2ik+2ik−1+⋯+2i1ik≥ik−1≥⋯≥i1i_k \geq i_{k-1} \geq \dots \原创 2020-11-21 22:47:55 · 387 阅读 · 0 评论 -
笔记
一.区间相关区间和:前缀和区间增减:差分+前缀和单调区间:二分查找区间可加:线段树复杂区间操作:分块数列中出现删除操作:链表二.搜索相关最优性剪枝:当前代价大于目前求得的最小代价可行性剪枝:明显不符合题意,或估算最小代价,大于已求则返回(最优性)优化搜索顺序:题目中明显指出(如用最少物品填满),进行排序后再搜索不入流剪枝:能剪就剪,但是不能牺牲正确性,也不能效率太低,会得不偿失广搜记得出队,v数组记录是否在队里,避免重复入队;深搜处理好边界,v数组记录是否访问过三.输入原创 2020-11-18 21:02:13 · 80 阅读 · 0 评论 -
拓扑排序
概念“对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。”——《百度百科》上面这一段已经说得很清楚了对于一个有向图,我们需要确定他节点的顺序,使得它的所有出边指原创 2020-11-17 22:37:40 · 132 阅读 · 0 评论 -
传递闭包
概念“传递闭包、即在数学中,在集合X上的二元关系R的传递闭包是包含R的X上的最小的传递关系。” ——《百度百科》人话 : 建立传递闭包的过程,就是给定一个有向(无向)图,对于节点 i 和节点 j ,如果他们联通但不直接相连,我们就建一个 i 到 j 的边.求法我们可以用 Floyd 算法在 O(n3)O(n^3)O(n3) 的时间内求得传递闭包我们用 d(i,j) 表示原图 , g(i,j) 表示它的传递闭包g(i,j) 是一个无权图,若从 i 出发,可以到达 j 则为 1 ,否则为 0初始原创 2020-11-13 22:37:10 · 8228 阅读 · 0 评论