• 最小圆覆盖

    定义:一个点集的最小圆覆盖是指可以将点集内的所有点覆盖的半径最小的圆。 随机增量法:根据三个定点确定一个圆。 时间复杂度 1. 性质一:描述:一个点集的最小圆覆盖是唯一的。 证明:如果有两个等大但不同的圆都可以将点集覆盖,那么这个点集的所有点一定在两个圆的交集部分。 那么以两个圆的交点连线为直径作圆,这个圆的直径一定小于之前的两个圆,且可以覆盖给定点集,与最小圆覆盖的定义矛盾。 所以一个点...
  • 莫比乌斯反演

    莫比乌斯函数:设有 那么其莫比乌斯函数如下: 莫反的两种形式:第一种: 第二种: 应用:一般 较为易求,而 比较难求,可以用莫比乌斯反演将 转化为 。
  • KMP 字符串匹配

    前缀表 ne[] :定义:假设长度为 的模式串 中 的所有以第 位开头的前缀用 表示(其中 表示前缀的长度), 的所有以第 位结尾的后缀用 表示(含义同上) 那么 example :假设模式串 ,那就有 正确性:假设当前匹配到了文本串 的第 位,模式串 的第 位,使得 。这时将 向后移动,使得 的第 位与 的第 位匹配。 假设移动更小的距离使得 ...
  • 无向图的双连通分量

    边双连通分量定义:一个不存在割边的极大连通子图被称为无向图的边双连通分量。这里极大的定义为当前的双连通分量不能再继续扩展一条边,使得当前连通分量不存在割边。 求法:边双连通分量可以使用 Tarjan 算法 求出,其主要想法是维护每一个点的时间戳,如果当前的某一个点可以到达一个时间戳先于它的点,那么这两个点之间的路径上的所有点几位一个边双连通分量的点,这可以用栈维护。 Code:以 P84...
  • 同余1是否互质的证明

    命题: 证明:有 假设 其中 设 , 且 则有 根据引理 可知 此时无论 取何值,都有 这与同余的定义矛盾,假设不成立 得证 引理证明: 即 ,其中
  • 洛谷P2480题解

    题目链接 信息提取:根据 “只要符合文献,每一种 都是有可能的” 和 “如果所有可能的 的所有情况数加起来为 的话” 可以推出 等于一个组合数数列的和,即 再根据 “那么他研究古代文字的代价将会是 ” 和 “只需要告诉他答案除以 的余数就可以了” 两句话即可得出最后的答案为: 解法阐述:1. 欧拉定理的推论:因为 是一个质数,所以欧拉定理的推论 () 成立,所以有: 而 的...
  • 有向图的强连通分量

    定义:给定一张有向图。若对于图中任意两个节点 ,既存在从 到 的路径,也存在从 到 的路径,则称该有向图是 “强连通图” 。有向图的极大强连通子图被称为 “强连通分量“,简记为 。 如图,红色部分即为一个 。 Tarjan算法:实现原理:1. 处理参数:对于每一个点 ,其都有两个参数 和 ​ 定义: :遍历到点 时的时间戳 :点 可到达的 ​ 值最小的点 求出参数:对该...
  • 主席树

    概念:主席树的全称为可持久化权值线段树,用于维护每一个数在插入线段树后的历史版本,从而进行区间 大数查询等操作 基本形态:如果为每一历史版本新开一棵线段树,空间复杂度将达到 ,是不可接受的 而对于一棵线段树,每一次操作仅会对树上的一条链产生影响,所以每一次新建一条链,再将其余不在链上的点用指针指向即可 第一版本: 第二版本: 第三版本: 写法:首先建立第一个版本的线段树,然后用链的形...
  • 快读

    getchar_unlocked()快读getchar_unlocked() 的速度比 fread() 略逊一筹,但是有代码短小精悍的优点,可以在比赛中直接使用 Code:12345678910namespace getchar_unlocked_fastread { const void read(int &x) { x = 0; int f = 1; char c = getc...
  • LCA--最近公共祖先

    最近公共祖先 LCA :对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u和v的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先。 (一) LCA 的倍增算法:倍增算法:倍增法求实质上是用二进制拼凑出两个节点的最近公共祖先的深度,进而求出其最近公祖先的方法 基本思想: 1.预处理数组和数组: 表示节点的第层的祖先,如 表示节点所在的层数 的...
12