摘要:
逆元(自学内容) define:若ax≡1 mod f, 则称a关于1模f的乘法逆元为x。也可表示为ax≡1(mod f)。 当a与f互素时,a关于模f的乘法逆元有解。 如果不互素,通过公式‘a/b mod p = (a mod (b·p))/b’来转化 计算逆元方式:(条件a,p互质) 费马小定理 阅读全文
摘要:
数学 欧拉函数 : \(\phi(p)\) = 所有小于p且与p互质的数的个数 狭义积性: \(φ(ab)=\phi(a)\phi(b) (a,b互质时)\) 积性的证明: 令n = \(\prod p_i^{c_i}\) 则\(\phi(n)\) = n * $\prod \frac{p_i-1} 阅读全文
摘要:
数论 模运算 a%b = a - [a/b] * b; (b > 0) “=”表示同余 a = b, a = c => b = c; a = b => a+c = b+c; a = b && c = d => a + c = b + d; 最大公因数gcd return !b ? a : gcd(b 阅读全文
摘要:
Floyd判圈算法 (又称龟兔赛跑算法) 作用: 1.判断链表是否有环 2.计算环的长度 3.寻找环的起点 判环: 【快慢指针】定义两个指针,慢指针(slow)每次前进一步,快指针(fast)每次前进两步,这里只要fast比slow前进的快即可,但前进步长太多会增加代码运行时间,所以采用两倍于slo 阅读全文
摘要:
欧拉路径 模板题 一个感性的定义:一笔画路径,经过一次所有的边,点可以多次走 特别的,若该路径的起点与终点相同,则称其为 欧拉回路 欧拉路径的存在条件: 此图连通; 对于无向图,当且仅当度数为奇的点的个数为 0 或 2; 对于有向图,当且仅当 入度与出度不同的点的个数为 0 或 2; 当入度与出度不 阅读全文
摘要:
2-SAT问题 2-SAT 问题, 简单来说,就是给出一个由 n 个布尔值组成的序列 A,再给出 m 个限制关系,每个条件的形式都是 Xi 为真/假 或 Xj 为真/假(比如:A[x] AND A[y]=0、A[x] OR A[y] OR A[z]=1 等),来确定 A[0..n-1] 的值,使得其 阅读全文
摘要:
网络流(可看算法进阶) 感性的define : 一张DAG,有一个源点s,一个汇点t,其它每条边有一个容量c 从点u到点v的流量:不能让经过的点的流量超出该点的容量 增广路:还能继续流流量的路,也就是有一条路径,路径上的容量都不小于0 最大流:s到t的最大流量 求最大流算法的核心思路:不停地找增广路 阅读全文
摘要:
强连通分量,缩点算法:Tarjan 代码及模板 强连通图:有向图,任意两点有路径 强连通分量:有向图,强连通子图数量 前置知识:dfs树(dfs序构成的树) 成分: 1.树边:dfs树上的边 (以下三种边是dfs树上没有但原图上有的边) 2.前向边:dfs树的祖先到儿子的边。 3.返祖边(后向边): 阅读全文
摘要:
MinMax算法和Alpha-Beta剪枝 Minmax:一种用于博弈论 的 暴力dfs搜索算法。 思想: 假设先手为 alpha(A),后手为 beta(B)。现在,每一个dfs的搜索状态有一个权值 \(w\)(可以是估价值),A想获得最大的\(w\)(即初始状态w最大),B想要A获得最小的\(w 阅读全文
摘要:
李超线段树 代码 作用: 加入一个一次函数,定义域为 [l,r]; 给定 k,求定义域包含 k 的所有一次函数中,在 x=k 处取值最大的那个,如果有多个函数取值相同,选编号最小的。 李超线段树使用条件:任意两函数之间最多只能有一个交点。大部分情况下李超线段树维护的是直线。 李超线段树的每一个节点维 阅读全文
摘要:
CDQ分治 有n个元素,第 i个元素有ai,bi,ci三个属性,设 f(i) 表示满足 aj ≤ ai且 bj ≤ bi 且 cj ≤ ci且 j != i 的 j 的数量。 求f数组。 解决三维偏序的流程: 同样有归并排序和树状数组两种做法,我们这里给出树状数组做法。 先按一维属性排序和去重 1. 阅读全文
摘要:
左偏树 例题 用处:一种支持\(nlogn\)的合并的二叉堆。 “ 对于一棵二叉树,我们定义 外节点 为左儿子或右儿子为空的节点,定义一个外节点的 \(dist\) 为1 ,一个不是外节点的节点 \(dist\) 为其到子树中最近的外节点的距离加一。空节点的 \(dist\) 为0。” 左偏树的定义 阅读全文
摘要:
Trick-光速幂 如果整个题目只求 \(a^x\) (a固定,x会变),则可以用 \(O(\sqrt{x_{max}})\) 预处理,\(O(1)\) 求解。 具体实现:预处理出 \(a^1, a^2, ···, a^{{\sqrt x}-1}\) 和 \(a^{\sqrt x}, a^{2*\s 阅读全文
摘要:
子集和dp 用处 统计n维偏序,但是每一维的大小只能是2。 计算子集权值之和。 实际上以上两种问题是等价的。 例如目前有一个集合:101(其中1表示有某个物品,0表示没有)。 那该集合包涵的子集有4个:101,100,001,000。现在要把这4个集合的权值加起来。 按照第二种理解(用处),我们可以 阅读全文
摘要:
最短路图 type1 : 给定一张有向图,起点s,终点t 求s到t的所有最短路组成的DAG(没有负环的最短路图一定是DAG) 首先需要建一张正向图,一张反向图 dis1[] 表示正向图上点s到所有点的最短距离,dis2[]表示反向图上点t到所有点的最短距离 考虑正向图上的一条边(edge){u,v, 阅读全文
摘要:
矩阵加速 矩阵快速幂优化dp 先介绍矩阵乘法: 现有大小为 \(n * n\) 的矩阵A,B,C。 \[C=A \times B \]\[C_{i,j}=\sum_{k=1}^{n} A_{i,k} \times B_{k,j} \]可以简记为 : A横乘B竖 矩阵快速幂: $ A * A * A 阅读全文
摘要:
Johnson多源负权最短路 Floyd算法复杂度是 \(O(n^3)\),然而dij的复杂度只是 \(O(mlogm)\)。 所以对于稀疏图来说,对每个点跑dij就已经比Floyd快了。 但是dij有一个缺陷:它不能处理有负权的图,于是Johnson算法应孕而生。(我认为是这样的) Johnson 阅读全文
摘要:
圆方树和虚树 例题 圆方树:先用Tarjian找点双,对于每一个点双,构建一个方点(一个虚空点),然后把每个点双上原来的点与这个新构建的方点连边,边上记录该点的信息(如边权,点权等)。 用处:可以把图变成树的同时任然保留原来点的信息。 (个人感觉圆方树就是一种特别的缩点方式) 圆方树是用来解决仙人掌 阅读全文
摘要:
最短路图 type1 : 给定一张有向图,起点s,终点t 求s到t的所有最短路组成的DAG(没有负环的最短路图一定是DAG) 首先需要建一张正向图,一张反向图 dis1[] 表示正向图上点s到所有点的最短距离,dis2[]表示反向图上点t到所有点的最短距离 考虑正向图上的一条边(edge){u,v, 阅读全文