算法小结区
文章平均质量分 86
Hypoc_
这个作者很懒,什么都没留下…
展开
-
拉格朗日插值法小结
文章目录介绍拉格朗日插值法重心拉格朗日插值法例题1技巧例题2例题3练习题介绍众所周知,nnn 个点 (xi,yi)(x_i,y_i)(xi,yi) 可以确定唯一一个 n−1n-1n−1 次的多项式。拉格朗日插值法就是,用这 nnn 个点表示出这个多项式。拉格朗日插值法考虑构造 nnn 个多项式,第 iii 个多项式 fi(x)f_i(x)fi(x) 满足:当 x=xix=x_ix=xi 时,fi(x)=yif_i(x)=y_ifi(x)=yi,当 x=xj(j≠i)x=x_j(j\ne原创 2021-01-15 07:58:40 · 1374 阅读 · 0 评论 -
轮廓线dp小结
介绍本质上是状压dp,所以是用在一类数据范围很小的题中,一般是求方案数之类的。正题这个东西大家有时候也管他叫插头dp,个人认为插头dp只是轮廓线dp的一种,只是把轮廓线上的状态设计成插头而已,事实上也可以不是插头,确实也有这样的题。不过插头dp可能更广为人知,这里就以一道经典题作为例题:给出一张网格图,每个位置是.或*,*表示这个位置不可用,你要在可用的位置上设计一条哈密顿回路,经过所有可用点。链接不知道这道题的话还是看一眼原题比较好qwq。先说轮廓线是什么东西,说清楚也很简单,就是下面的原创 2020-11-25 22:12:23 · 1014 阅读 · 0 评论 -
树上点分治详解【入门向】
本蒟蒻想要给大家写一篇尽可能详细的树上点分治的文章,以便刚入门的各位能够理解树上点分治,就不用像我一样在网上看了十几篇大佬的文章后还很蒙逼了(我太菜了QAQ),那么,我们就进入正题吧! 首先安利一波Guess_Ha大佬的树上点分治! 树上点分治主要解决有关树上路径统计的问题,我们这里以洛谷上的P3806 【模板】点分治1作为例题。 题目...原创 2018-08-18 15:52:22 · 4316 阅读 · 29 评论 -
虚树小结
介绍这是个用来处理树上问题的东西,一般题目的形式都是给出一棵树,多组询问这样子,然后每次询问会给你一些点,询问的问题一般只关心这些点。如果发现,对于每组点,在树上做决策时只需要关心这些点以及这些点的lca们,那么就可以考虑建出他们的虚树,然后在虚树上进行下一步操作。而虚树这个东西,是只包含这些点以及这些点的lca们的,而这些点的lca们与这些点的数量级是相当的,所以建树的时间复杂度基本上就是 O(slogs)O(s\log s)O(slogs),其中 sss 等于所有询问给出的总点数,乘上 log原创 2020-06-05 11:19:42 · 591 阅读 · 1 评论 -
Kruscal重构树小结
废话这好像也是个咕了很久的东西……正题这个东西不难理解,而且还有很多优美的性质。具体来说,我们一般用 KruscalKruscalKruscal 算法求一张图的最小生成树时,假如当前枚举的边 所连接的两个点 (x,y)(x,y)(x,y) 不在同一个连通块内,那么连上这条边。而 KruscalKruscalKruscal 重构树的思想是,不直接连这条边,而是新建一个点 zzz,让这个点代表这条边,并且将这条边的权值给这个点,然后连接 (x,z),(y,z)(x,z),(y,z)(x,z),(y,z原创 2020-05-28 09:42:36 · 221 阅读 · 0 评论 -
2-SAT算法小结
定义SAT 是 Satisfiability 的简称,一般记作 k−SATk-SATk−SAT 即 k−k-k−适应性 问题。由于当 k>2k>2k>2 时是个NPC问题,所以只考虑 k=2k=2k=2 ,即 2−SAT2-SAT2−SAT 问题。一般来说,就是有若干个位置,每个位置 aia_iai 的状态为 0/10/10/1 中的一种,然后有若干个限制,每个限制形如 ai∗aj=0/1a_i*a_j=0/1ai∗aj=0/1,其中 ∗*∗ 可以是 and,or,xora原创 2020-05-14 17:05:45 · 816 阅读 · 0 评论 -
OI群论入门
文章目录废话群定义相关概念置换定义连接循环置换群陪集性质1性质2性质3性质4拉格朗日定理轨道-稳定集定理burnside定理PoˊlyaP\acute olyaPoˊlya 定理题表废话群论好强啊……但其实并不是个太难理解的东西呢qwq。为了方便理解,不会有出现大量数学符号堆在一起的地方。下面进入正题。群定义群其实就是一个集合加上了若干个限制。一般将群记作 (G,∗)(G,*)(G,∗),GGG 是一个集合,∗*∗ 是集合 GGG 内的二元运算。(∗*∗ 可以是 + − 原创 2020-05-12 15:39:33 · 957 阅读 · 1 评论 -
wqs二分详解
废话学这个算法的时候,深切的体会到,能找到一篇好的文章来学习是多么幸福啊……正题这是一个用来解决这样一类问题的算法:有若干个物品,要求你选出 mmm 个,选的时候带有限制,要你求出最优的方案用的时候有一个大前提,就是,设 g(i)g(i)g(i) 表示选 iii 个物品的最优方案,那么将所有点 (i,g(i))(i,g(i))(i,g(i)) 画出来,他们一定要组成一个凸包(上凸下凸...原创 2020-04-17 16:47:11 · 10854 阅读 · 5 评论 -
四边形不等式优化详解
废话这大概是跟斜率优化一样神的东西qwq,但是证明复杂一点,以及似乎用到的题目也少一点,毕竟使用条件有点苛刻。正题它用来加速类似这样的 dpdpdp:f[i][j]=mink=ij−1{f[i][k]+f[k+1][j]+w(i,j)}f[i][j]=\min_{k=i}^{j-1}\{f[i][k]+f[k+1][j]+w(i,j)\}f[i][j]=mink=ij−1{f[i][k]...原创 2020-04-16 11:32:47 · 520 阅读 · 0 评论 -
Matrix-Tree矩阵树定理——从入门到入坟
前置芝士——行列式正题这个定理用来解决这样一个问题:一张无向图有多少个不同的生成树。首先需要构造这样一个矩阵:设这个矩阵为 fff,当 i≠ji\neq ji=j 时,f[i][j]f[i][j]f[i][j] 的值为 iii 与 jjj 之间的边数的相反数,当 i=ji=ji=j 时,f[i][j]f[i][j]f[i][j] 的值为 iii 的度数。比如有这样一张图(没错有重边也没...原创 2020-03-17 20:38:33 · 302 阅读 · 0 评论 -
换根dp小结
前言这个东西据说(听师兄说)是这次 CSP−SCSP-SCSP−S 最后一题的题解做法,虽然还没去钻研那题,但是姑且算是把这个东西学会了。思路首先这是个在树上用的东西,一般就是不告诉你哪个点作为根,而你就需要求出所有点作为根时的答案,然后才能得到最终的答案。思路也不是什么很神奇的东西:就是一开始先固定一个点作为根,然后 dpdpdp 一次求出解,然后利用这个解再做一次 dpdpdp——这次...原创 2020-01-17 16:31:24 · 1784 阅读 · 1 评论 -
迪杰斯特拉算法详解
介绍英文名: Dijkstra用处: 这是个用来在边有非负权的图中求单源最短路的算法。(注:单源,即只有一个固定的起点)流程说白了,就一句话:每次找到离起点最近的点,然后用它到起点的最短路来更新其他的点到起点的最短路,以及,每个点只用一次。证明和其他的在下面,这里先举个栗子!比如说现在有这样一张 555 个点的图(起点是 111):下面的 disdisdis 数组表示现在每个点到...原创 2019-11-14 21:30:09 · 1933 阅读 · 0 评论 -
dsu on tree(树上启发式合并)详解
树上启发式合并详解。原创 2019-11-08 10:56:32 · 9181 阅读 · 4 评论 -
神奇的珂朵莉树
珂朵莉镇楼qwq算法基础这个算法的基础很神奇,大家想一下这样一个问题:有一个长度为 nnn 的序列,随机选出一个区间,这个区间的期望长度是?(要是会的话就跳过做法吧)做法考虑左端点在 111 位置的情况,那么区间期望长度为:1+n2\frac {1+n} 221+n,这种情况的出现频率为 nnn。考虑左端点在 222 位置的情况,那么区间期望长度为:n2\frac n 22n...原创 2019-10-27 22:18:07 · 382 阅读 · 0 评论 -
动态树 Link-cut-tree
前置废话顾名思义,这个科技可以用来高效维护一棵动态的树。所谓动态的树,也就是形态可以变化的树,包括加边,删边等等。它有点像树链剖分,也是把树分成一条一条链来维护,但是因为树的形态可以变化,所以不能用像死板一样钉在树上的线段树,而要换成更加灵活的数据结构——SplaySplaySplay!另外一个问题来了,因为树的形态会变化,子树的大小随时都在变,重链是维护不了了,怎么办呢?LCTLCTLCT...原创 2019-10-05 09:15:28 · 222 阅读 · 0 评论 -
斜率优化详解
别担心,斜率优化不是什么很毒瘤的数学知识。例题题目传送门朴素做法但这 O(n2)O(n^2)O(n2) 的做法当然不是我们追求的~斜率优化这个优化很 nb ,直接把 dpdpdp 优化成 O(n)O(n)O(n) 的,所以这几乎已经是一个算法了。具体是,我们需要寻找到 dpdpdp 方程中的单调性,发现单调性之后,就可以直接找到最优的那个,直接从它转移过来即可。那么先写出这个例题的...原创 2019-10-04 14:48:50 · 429 阅读 · 0 评论 -
三元环计数
算法如其名,就是用来找三元环的。介绍给出一张无向图,问图中有多少个三元组{x,y,z}\{x,y,z\}{x,y,z},满足图中存在 {x−y,y−z,z−x}\{x-y,y-z,z-x\}{x−y,y−z,z−x} 三条边。转化考虑将这张图转化为有向图:对于一条无向边 x−yx-yx−y,不妨设点 xxx 的度大于点 yyy 的度,那么就将这条无向边变成 x→yx \to yx→y。假如...原创 2019-09-26 15:12:02 · 1814 阅读 · 0 评论 -
动态DP小结
先摆一道模板题。(里面的最大权独立集也就是指选若干个点,这些点两两之间没有直接连边,然后使点权和最大)假如这是一道静态的题,大家肯定随手就写出方程了:设 fi,0f_{i,0}fi,0 表示不选 iii 的最优解,fi,1f_{i,1}fi,1 表示选 iii 的最优解,那么有(其中 sonsonson 表示 iii 的儿子):{fi,0=∑max(fson,0,fson,1)fi,1=vali+∑fson,0\begin{cases}f_{i,0}=\sum \max(f_{son,0},原创 2019-09-24 14:37:26 · 118 阅读 · 0 评论 -
快速乘
问题是这样的:求a*b%mod没了。难受的是,虽然aaa都可以用一个变量存下来bbb,但a∗ba*ba∗b很大,不行。更难受的是,modmodmod也很大,a,ba,ba,b和它取个模也没有用。于是有了快速乘。发现它有一个性质,就是这条柿子的结果也是可以用一个变量存下来的。于是可以将bbb拆开,将这个会爆掉的运算拆开成多个不会爆掉的运算相加。发现这个问题转化成小学的定义是这样的:...原创 2019-08-25 21:46:50 · 146 阅读 · 0 评论 -
二分算法
二分入门摆道例题:给出一个上升的序列,每次询问区间[l,r]中大于等于x的数有多少个。每次取当前区间的中点,mid=l+r2mid=\frac {l+r}2mid=2l+r,假如mid位置上的数小于xxx,那么显然[l,mid][l,mid][l,mid]这个区间内的数都小于xxx,但是我们还不知道[mid+1,r][mid+1,r][mid+1,r]这个区间内的情况,于是将lll变成...原创 2019-08-23 11:06:58 · 198 阅读 · 0 评论 -
快速幂
用来解决的问题是这样的:求aaa的bbb次方模一个什么数难点在于bbb一般会很大。考虑将bbb进行拆分,将bbb转化成二进制下的表示,然后将每一位拆出来。比如当bbb为111111时,转化成二进制就是(1011)2(1011)_2(1011)2,可以拆成(1000)2+(10)2+(1)2(1000)_2+(10)_2+(1)_2(1000)2+(10)2+(1)2,也就是8+2...原创 2019-08-25 21:35:37 · 140 阅读 · 0 评论 -
可持久化线段树
废话就不多说了,直接进入主题吧!可持久化线段树主要用来解决什么样的问题呢,就像下面这个:有一个数列,你需要维护以下几种操作:1、单点修改2、查询在第x次修改前的区间和因为要查询在第x操作前的区间和,那么我们肯定要能够用一种奇妙的做法来保存第x次操作前的线段树,那怎么保存呢?首先,肯定是不能对每一次操作新建一棵线段树,因为线段树本来就是很耗空间的一个东西,那么我们细细想一下,发现...原创 2018-05-25 13:31:06 · 2325 阅读 · 0 评论 -
最近公共祖先——倍增算法
       模板题是这个样子的:给你一颗有根树,每次查询两个节点的最近公共祖先。       最近公共祖先为何物?简单来说,就是两点间的路径中深度最小的那个节点。       那么,有什么办原创 2018-10-25 20:56:47 · 258 阅读 · 0 评论 -
树上差分小结
       首先回顾一下差分数组——一个支持O(1)O(1)O(1)修改区间但是要O(n)O(n)O(n)查询单点或区间的东西。       那么,我们可不可以将这种东西原创 2018-10-29 15:04:13 · 1127 阅读 · 2 评论 -
线性基详解
废话update on 2020.4.6: 大巨巨在评论中指出了以前写的的删除操作有 bugbugbug,仔细思考后稍微修改了一下(然而跟我在评论中写的做法并不一样qwq),并且更新了整篇文章的排版。线性基是啥?线性基是一个数的集合,并且每个序列都拥有至少一个线性基,取线性基中若干个数异或起来可以得到原序列中的任何一个数。线性基三大性质原序列里面的任意一个数都可以由线性基里面的一些数...原创 2018-11-03 11:07:28 · 39429 阅读 · 56 评论 -
三分小结
奇妙的二分       二分,顾名思义,将序列分成两份,判定一下分界点,满足要求的话去掉其中一份,否则去掉另一份。       这种做法往往用在在一个序列中求解,每次可以去掉一半,那么只需要log2(n)log_2(n)log2(n)的时间就可以求出答案了,十分的高效。&n原创 2018-12-10 14:03:22 · 174 阅读 · 0 评论 -
模拟退火
模拟退火,算法如其名,真的就是个大模拟,模拟的是高温物体徐徐降温然后达到结晶态的过程,结晶态是内能最低的状态,而我们利用模拟退火,要找的也正是最值。过程模拟退火一般是用于在一个函数上找最值,也可以干一些奇奇怪怪的事情,这里就以函数为例子了。既然是模拟退火,肯定要有个温度呀!所以要有一个温度 T,以及还要有个初始点 x,我们再给定一个跳跃的范围 dir(dirdirdir 因题目而异,你也可以用 TTT 来代替 dirdirdir,但个人认为 dirdirdir 根据题目手动设定比较好)就可以开始退火了原创 2018-12-12 13:59:13 · 413 阅读 · 0 评论 -
离散化详解
离散化:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。 &nb原创 2019-01-26 17:23:44 · 1348 阅读 · 1 评论 -
数位dp小结
啥是数位dp       数位dp可不是对于数的每一位进行dp,而是指对于这个数的组成进行dp。对于数的每一位进行dp,只是数位dp的一类题目。看看最简单的例题【题目描述】现在有两个要求:这是一个n(n≤106)n(n \leq 10^6)n(n≤106)位的数(不含前导零)相邻的两位的差值大于等于p(p≤9)p(p \leq 9)p(p≤9)...原创 2019-03-15 13:46:09 · 151 阅读 · 0 评论 -
扫描线算法
背景之前看到洛谷管理员大佬发明了个二次分块,然后就想学学,发现扫描线是个前置知识,于是来肝这个算法了,发现其实不难。进入正题扫描线一个很经典的例题:在坐标轴上有若干个矩形,问他们覆盖的面积总和。因为他们覆盖的面积有重复,于是就用到了神奇的扫描线算法。假设有两个矩形,如图:先来看一道例题:题目大意,...原创 2019-04-18 13:25:18 · 21409 阅读 · 2 评论 -
第十四分块(前体)——二次离线莫队
题目传送门先膜拜一下lxl出题大佬以及Scarlet解题大佬!进入正题 二次离线莫队是一个新的科技,可以处理这样的问题:一个序列,m个询问,每次询问l~r间有多少对(x,y)(l<=x<y<=r)满足某条件。 而在这道题中,某条件也就是x^y的二进制表示下有k个1。&...原创 2019-05-07 14:06:22 · 823 阅读 · 2 评论 -
RMQ问题 & ST表
RMQ问题,即区间最值问题,显然,可以使用O(n)O(n)O(n)的时间过一遍得到答案,但是,当遇上多次询问的时候,这种做法就很菜了。所以,我们需要一个高效的算法。ST表,就是用来干这种事的。ST表有点类似倍增,对于一个长度为2n的区间的最值,显然可以用其中包含的两个长度为2n-1的区间的最值合并得到。于是,我们可以用O(nlogn)O(nlogn)O(nlogn)的时间,造一个ST表。具...原创 2019-07-10 08:54:35 · 203 阅读 · 0 评论 -
cdq分治小结
神奇的思想一般的分治,众所周知的,是通过将大的问题拆小,然后对小问题的答案进行合并得到大问题的答案,但是cdq分治不是。我们知道,分治时,将一个区间从中间斩开,分两半处理,cdq分治在处理完之后,不是合并答案,而是计算左区间对右区间的贡献,这样子可以将维度降低,问题就更好做了。(降维攻击?)引子现在有n个二元组,每个形如(a,b),现在问有多少对二元组之间是吊打的关系。Ps:x吊打y的定义...原创 2019-07-20 16:29:16 · 188 阅读 · 0 评论 -
分块算法
众所周知,这是一个十分暴力的算法,但是,他却站在了众多暴力算法的顶端,其看似简单实则十分玄妙的思想,牵扯出了一大串更加高端的算法。分块,这个极为基础的算法,你值得拥有!进入正题例题什么的不说了,因为分块的用法实在太广泛,为了不限制各位对分块美好的遐想,我还是直入主题吧。分块可以用来维护一个序列。对于这个长度为n的序列,我们能将他分成n\sqrt nn份,每份都含有n\sqrt nn个...原创 2019-08-01 20:51:35 · 282 阅读 · 0 评论 -
差分数组
差分数组是个很神奇的东西,设s是a的差分数组,那么首先说一下s的定义:s[i]=a[i]-a[i-1],对于特殊的s[0],默认它的值为a[0](因为没有a[-1]这个东西),一般神奇的东西第一眼看上去都很平凡,就比如这个东西,但是它用起来十分的方便,它的区间修改只要O(1)的时间,但也有坏处,就是单点查询需要O(n)的时间,与普通的直接修改和查询相比可以说是在另一个极端,那么接下来说说怎么修改和...原创 2018-04-10 15:07:04 · 237 阅读 · 0 评论