随笔分类 - 算法笔记
摘要:莫队算法 一句话算法:莫队是一种基于分块和询问排序思想的序列处理算法,因此大部分时间,我们需要离线询问,再对询问按某些优先级排序处理。 例题 详情见 "小Z的袜子" ,推导过程与莫队无关故略去,这里直接给出结论: 对于一个询问$[l, r]$,$ans = \frac{\sum\limits_{i
阅读全文
摘要:定义 (不严谨的口胡) 树链剖分将一棵树按照 某种方式 划分成多条链,再利用一系列 数据结构 对链上信息进行维护。 有什么用? 详见 "洛谷模板P3384" 支持: 求$LCA$ 路径信息维护 子树信息维护 ... 算法实现 怎么实现呢? ~~因为博主太菜了不会长链剖分,所以这里讲轻重链剖分~~ 据
阅读全文
摘要:题目链接: "kma!" 题目分析: 割点模板,对于当前搜索的节点是不是搜索树里的根节点分类讨论 如果是根节点,显然如果它的子树数量$ =2$,把它$cut$掉两棵子树就不连通了 如果不是根节点,如果有搜到的节点$low[v] = dfn[u]$,说明有节点不通过$u$没办法上翻到环外,那么把它$c
阅读全文
摘要:开始补一些算几的东西。 定义引入 凸包到底是个什么东西呢? 在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,...Xn)的凸组合来构造. ——摘自百度百科 ~~有没有整个人都mengbi了~~ 对于二维凸包,有一个很形象的描述: 平面上
阅读全文
摘要:网络流初探 2019.7.15,这个蒟蒻终于听懂了一听就很高大上的网络流~~其实是这个人过于zz~~,于是她准备来水一发博客。 前言 网络流解决的主要是这样一类问题: 给定一个源点、一个汇点,并给定$n$个点,$m$条边,每条边有一个最大流量,现从源点源源不断地注入可以视为无穷大的水流,问在汇点能接
阅读全文
摘要:一句话算法: 主席树,又名可持久化线段树,是一种 基于前缀和思想对历史版本进行保存,可支持单点修改,查询某个历史版本下某位置的值 的数据结构。 主要思想: 对于我们上面加粗的命题,我们先考虑暴力的做法: 对于每一个历史状态,建立一棵线段树维护当前状态的信息。 然后你会发现,状态转移和空间耗损都非常巨
阅读全文
摘要:Manacher:一种能在$O(n)$的时间内求解一个字符串中最长回文串长度的算法 不过洛咕例题是真的少,加上模板也只有三道 问题: 给定一个字符串,求解其回文子串中最长的一个的长度。 几种暴力: $O(n ^ 3)$ 依次枚举它的每一个子串,然后复制翻转一位一位进行判断(一看就很慢。抬走。) $O
阅读全文
摘要:定义: Miller Rabin算法是一个随机化素数测试算法,作用是判断一个数是否是素数,且~~只要你脸不黑以及常数不要巨大~~一般来讲都比$O(\sqrt n)$的朴素做法更快。 定理: Miller Rabin主要基于费马小定理: $$a ^ {p 1} \equiv 1 (mod p)$$其中
阅读全文
摘要:支持单点修改区间求gcd 因为$gcd$满足交换律和结合律,所以和维护区间和没什么区别…… 支持区间修改区间求gcd 因为求$gcd$有一个辗转相减法,所以有一个$gcd(a,b)=gcd(b a,a)$,推广到多个数也成立。具体证明在 "fsy神仙的博客" 里有写(转载的gsj学长的……) 所以对
阅读全文
摘要:例题 "洛谷P1894" 分析: 裸题,牛栏作为一个点集,牛作为另一个,牛喜欢牛栏则从牛向牛栏连一条边跑匈牙利就得了,邻接表开大点 代码: include define MAXN (2000+5) using namespace std; inline int read(){ int cnt=0,f
阅读全文
摘要:二分图的定义: 二分图的顶点可以被分为两个点集,且相同点集内的顶点之间没有连边 二分图的判定: dfs整个图并对其进行染色,且只能染两种颜色,若与其相邻的顶点与其同色则不是二分图,否则继续dfs。 代码: // 匈牙利算法: // int find(int u){ for(register int
阅读全文
摘要:$2019/10/3 UPD:$ 我回来填坑了 分块: 联想一下线段树,分块也是一种基于对数据进行~~信仰~~合理分治以提高处理效率的算法 考虑一下线段树是一分为二的树形数据结构,即有从属关系(一个节点的两子节点从属于它) 而分块是一种线性的分治方式,它把数据分成若干个互不影响的块,之后对于一些范围
阅读全文
摘要:扩展欧几里得算法用于求解形如 $ ax+by=gcd(a,b) $ 的方程(其中$a$,$b$是常量且$ =0$) 首先如果$b=0$,则显然有$x=1$,$y=0$满足上方程 然后如果$b 0$的话: 首先我们知道$ gcd(a,b) = gcd(b, a mod b ) $(欧几里得算法求两数g
阅读全文
摘要:(由于本人太菜所以最近一直在补一些基础算法……) 求树的重心的基本思想就是从每个节点出发分别遍历一遍树,统计max_part,其中能够使得max_part最小的就是树的重心 另外:一棵有根树至多有两个重心,这个结论好像有些题可以用(比如BZOJ4337,不过那个数据太水只有50(什么暴力乱搞都能过去
阅读全文
摘要:在一个有n个节点,n 1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径。 求树的直径主要有两种方法:树形dp和两次bfs/dfs,~~因为我太菜了不会写后者~~这里只介绍树形dp 树形dp求树的直径 我们不妨设1号点为根节点,那么这就可以看做一棵有根树。
阅读全文
摘要:这是一个还没有来得及填的坑……等我丢个带旋的treap代码在这里 可能会过几(hen)天(jiu)才写 带旋treap代码:(洛谷P3369【模板】普通平衡树) include define grbv GetRankByVal define gvbr GetValByRank using names
阅读全文

浙公网安备 33010602011771号