算法模板
文章平均质量分 74
wang3312362136
这个作者很懒,什么都没留下…
展开
-
算法模板——Catalan数
目的 用于解决一些有(qi)趣(guai)的问题,如:括号匹配问题,凸多边形划分问题,二叉树种类问题等。递推方程为hn=∑ni=1hi−1×hn−ih_n=\sum_{i=1}^{n}h_{i-1}\times{h_{n-i}}。 为什么凸多边形划分的方案数是Catalan数? 设有一个凸xx边形,选择一条边,作一个以这条边为一边的三角形,那么这样就将原xx边形分成了三部分:一个mm边形,一个原创 2017-11-07 15:14:21 · 246 阅读 · 0 评论 -
算法详解——左偏树
可并堆是啥给你两个优先队列,要你合并这两个优先队列,而且还要保证合并后符合优先队列的性质,时间复杂度要限制在log(s1+s2)log(s1+s2)\log (s_1+s_2)之内。怎么做?现在普通的堆已经满足不了要求了。这个时候,就要用一种神奇的数据结构:左偏树了。(二项堆,斐波那契堆不在本文的考虑范围内)左偏树顾名思义,左偏树就是一棵向左偏的树(逃我们定义一个...原创 2018-06-07 21:59:25 · 13137 阅读 · 5 评论 -
浅谈算法——莫比乌斯函数,莫比乌斯反演和杜教筛
莫比乌斯函数和莫比乌斯反演前置技能基础数论内容。莫比乌斯函数μ(n)μ(n)\mu(n)就是莫比乌斯函数,如果有: n=∏i=1mpaixi(ai>0)n=∏i=1mpxiai(ai>0)n=\prod_{i=1}^{m} p_{x_i}^{a_i}(a_i>0)那么:μ(n)=⎧⎩⎨⎪⎪1(−1)m0n=1∀ai≤1otherμ(n)={1n...原创 2018-08-09 15:11:37 · 245 阅读 · 0 评论 -
浅谈算法——多项式乘法相关
从多项式乘法到FFT这一段大部分是复制以前我写的这篇博客:https://blog.csdn.net/wang3312362136/article/details/79510933这篇博客有详细的代码,但是阅读体验布星,因此我把它的大部分证明过程复制下来。如果会fft,请跳过这一段。多项式乘法我们知道,多项式可以表示成:A=∑i=0naixiA=∑i=0naixiA=\...原创 2018-08-15 09:55:10 · 2667 阅读 · 0 评论 -
浅谈算法——LCT
前置技能splay: 必须树链剖分: 可选,知道树链剖分会容易理解一些。以下大部分图片来自https://blog.csdn.net/saramanda/article/details/55253627Link Cut Tree(LCT)LCT,又叫林克-卡特树,可以用来解决动态树问题。LCT显然是一棵树,它长这样:这上面有一些粗一点的边,我们把它称为重边;还有...原创 2018-09-04 20:43:59 · 6258 阅读 · 0 评论 -
莫比乌斯反演+杜教筛 题表
“入门”难度BZOJ 3994 [SDOI2015]约数个数和BZOJ 4805 欧拉函数求和BZOJ 2440 [中山市选2011]完全平方数Luogu P3935 CalculatingLuogu P4450 双亲数BZOJ 4916 神犇和蒟蒻需要一点“小”技巧BZOJ 2005 [Noi2010]能量采集BZOJ 2154 Crash的数字表格 BZOJ 2693 jzp...原创 2019-01-10 17:15:22 · 384 阅读 · 0 评论 -
支配树与Lengauer-Tarjan算法
伪目录给出支配树的定义给出一些性质介绍快速构造支配树的Lengauer-Tarjan算法及具体实现支配树是啥一个有源点的有向图,其支配树是满足下面条件的一个有向图:对于支配树上一点,若断开此点,则源点必定不能到达它的任何儿子,并且能到达其他任意一个点。不显然的,它是一棵树(当然后面会有证明)支配树有很多实际用途,我都不知道。一些性质对于一个有向图,假设源点为rrr,先从rr...原创 2019-01-14 11:33:44 · 985 阅读 · 0 评论 -
路径压缩优化并查集的时间复杂度
路径压缩优化并查集大家一定很熟练了,那么它的复杂度是多少呢?O(mα(n))O(m\alpha(n))O(mα(n))?的确,很多人都是这么说的,但是事实上它的复杂度是O(mlog1+m/nn)O(m\log_{1+m/n}n)O(mlog1+m/nn)的,并且能找到一种方法卡到这样的复杂度。要卡并查集,首先要构造一种树——二项树。这种二项树还与普通的不太一样。定义:在给定jjj的情况下...原创 2019-01-14 12:12:20 · 6258 阅读 · 2 评论 -
一个多项式求逆的卡常技巧
假设在 mod xn\bmod x^nmodxn下,多项式AAA的逆元是FFF,在 mod x⌈n/2⌉\bmod x^{\lceil n/2\rceil}modx⌈n/2⌉下,多项式AAA的逆元是F0F_0F0,根据多项式求逆的基本公式F=2F0−F...原创 2019-01-09 16:34:07 · 487 阅读 · 1 评论 -
浅析算法——斯坦纳树
斯坦纳树用途给一个图,求最小生成树?这个很简单,prim/kruskal搞一搞。如果只要求联通某几个点,而不强制要求其他点的联通?这个prim/kruskal就不好做了。那怎么求这个呢?当然是要用到斯坦纳树啊。计算方法假设fi,stafi,staf_{i,sta}表示最后一个联通的是iii,当前要求点的联通性为stastasta(状态压缩),那么有两种状...原创 2018-05-04 16:57:19 · 1292 阅读 · 0 评论 -
算法详解——后缀自动机
由于最近CSDN对Markdown的支持不好,因此贴出Markdown代码:https://paste.ubuntu.com/p/Wd8PJnnxTf/DFA////////////////////////////////////////////////////////////////////////// DFA,即确定性有限状态自动机,由一个五元组M=(Σ,Q,qs,F,tr)M=(Σ...原创 2018-02-22 17:39:28 · 230 阅读 · 0 评论 -
浅谈算法——博弈论
转载自https://www.cnblogs.com/Wolfycz/p/8430991.html网上的博弈博客和论文有很多,但是有些没有详细的证明,仅仅是给出了结论。今天作者将一些常见的博弈论模板集中起来,给大家介绍一下博弈论中一些单一游戏的决策和常见的Nim模板与证明。注:下列游戏都建立在双方都有最优策略的情况下,若未加以说明,则每人每次至少取一个石子。例1:取石子游戏之一...转载 2018-02-10 11:10:21 · 13790 阅读 · 2 评论 -
算法模板——Tarjan算法
Tarjan算法是一种用来求强连通分量的算法。 什么是强连通分量? 一个有向图的极大强连通子图叫做强连通分量。就是说,一个图的一个子图是强连通图,再加进一个点和与之相邻的边,那么这个图就不是强连通图,这样这个子图是原图的强连通分量。 确定一些名词 首先每张图都有一棵dfs树,树上的边叫树边。 从这棵树的一个节点到自己的儿孙节点且不是树边的边叫做前向边。 从这棵树的一个节点到自己的祖先节点原创 2017-11-08 09:21:44 · 215 阅读 · 0 评论 -
算法模板——倍增求LCA
LCA是什么? 最近公共祖先,就是树上的两个点它们深度最大(离根节点最远)的公共祖先。算法 1. 朴素算法。时间复杂度O(n×q)O(n\times q)。并没有实际意义。 2. 倍增算法。时间复杂度O((n+q)logn)O((n+q)\log n)。倍增算法 它的特点是:每次向祖先跳的距离,不是11,而是2k2^k,这样可以省很多时间。 记录每个点的fai,jfa_{i,j},表示ii原创 2017-11-08 15:15:34 · 270 阅读 · 0 评论 -
算法模板——树链剖分
树链剖分 用途:一棵树上求一条链上的点的权值和(或最大最小值),并且更改一个点(或边)的权值。 基本思路:破树成链(这个词是我乱造的) 实现方法:轻重边思想 名词解释: 名词 解释 重边 印点出来的(每个非叶子点都有且仅有一条重边) 轻边 除了重边以外的所有边 重链 一些重边连成一条链,这条链就是重链(单独一个点也算重链) 重儿子 一个节点的重边连向的儿原创 2017-10-31 20:06:05 · 211 阅读 · 0 评论 -
算法模板——数位dp
数位dp 顾名思义,数位dp就是对每个数位进行dp。一般来说,数位dp的适用范围是求一个区间[a,b]的值,其中a和b会很大,而且值具有可加性。那么对于每个值可以分成一些段,如:2333可以分成求0-999,1000-1999,2000-2299,2300-2329,2330-2333这些段的值。代码//[ZJOI2010]count数字计数#include <cstdio>#include原创 2017-10-31 20:20:53 · 245 阅读 · 0 评论 -
算法模板——后缀数组
后缀数组是什么?可以吃吗? 不可以吃,它是给一个字符串的所有后缀进行排序的算法。 如:一个字符串aabaaaab,它的后缀排好序后起始位置分别是:4 5 6 1 7 2 8 3 显然如果暴力去排序时间复杂度为O(n2)O(n^2),可以用倍增算法或DC3算法来解决,本文主要介绍倍增算法(我才不会告诉你其实是我不会DC3算法呢)。 接下来定义如下几个数组: 数组名 意义 saisa_原创 2017-11-21 13:37:18 · 175 阅读 · 0 评论 -
算法模板——manacher算法
manacher算法是什么? 这是一种求最长回文字串的算法。 首先要采用一种方法,向原串中每隔一个字符加入一个没有在原串中出现过的字符,这样能够避免分类讨论奇数长度的回文串和偶数长度的回文串。同时再在头部和尾部加入两个不相同的字符,防止寻找时溢出字符串范围 例如:abbaabba这个串如果向中间加入$\$,头部加入!!,尾部加入∗*,经过了刚才的操作后变成了!$a$b$b$a$∗!\$a\$b原创 2017-11-22 17:13:24 · 379 阅读 · 2 评论 -
算法模板——高斯消元
基础首先,nn元11次方程组 ⎧⎩⎨⎪⎪⎪⎪⎪⎪a1,1x1+a1,2x2+⋯+a1,nxn=b1a2,1x1+a2,2x2+⋯+a2,nxn=b2⋯an,1x1+an,2x2+⋯+an,nxn=bn\begin{cases}a_{1,1}x_1+a_{1,2}x_2+\cdots+a_{1,n}x_n=b_1\\a_{2,1}x_1+a_{2,2}x_2+\cdots+a_{2,n}原创 2018-01-17 13:04:25 · 187 阅读 · 0 评论 -
算法模板——AC自动机
特别声明:想找到一种AC自动机的无指针写法的神犇请直接翻到末尾 AC自动机 一种能让你AC的算法? 一种字符串匹配算法! 用来解决多字符串匹配问题的算法啦。 首先想一想KMP算法……(不知道KMP是什么?到时候我会写一篇专门的博客,敬请期待) 例如字符串aabaaaba与aba的匹配: 在第二个位置失配,这个时候模式串可以向下跳一位: 全部匹配成功,这个时候可以向下跳两位:原创 2017-11-28 21:13:25 · 218 阅读 · 0 评论 -
关于一个平面内矩形个数的问题
问题一个平面内的nnn个点,以这nnn个点为顶点,最多能构成多少个矩形?点的排列是自己决定的。先说结论:构成矩形的个数,上界是O(n2n)O(n^2\sqrt{n})O(n2n),下界是Ω(n2)\Omega(n^2)Ω(n2)。上界记Ca,bC_{a,b}Ca,b表示a,ba,ba,b为直径的圆。对于每一个点pip_ipi,如果pa,pb,pc,pdp_a,p_b,p_c,p_d...原创 2018-10-10 20:46:15 · 1555 阅读 · 0 评论