随笔分类 -  算法笔记

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