该文被密码保护。 阅读全文
摘要:
1.引入 1.1. 问题描述 给定一个长度为 \(n(1 \le n \le 10 ^ 5)\) 的字符串和 \(m\) 个模式串 \(s_1, \cdots, s_m\),求问字符串中出现了多少个模式串。 \(\sum s_i \le 10^5\)。 1.2. 解法 考虑当 \(m = 1\) 的 阅读全文
摘要:
引入 在点分治的过程中,它的遍历顺序会遍历每棵子树的重心,而这棵由重心生成的树会产生一棵新的树,便是点分树。 常用来解决树上与树的形态无关的路径问题。 过程 如下图,它的点分树是它自己。 因此可以看出一棵树的点分树可能是它本身。 性质 因为点分树 \(\mathcal{O}(\log n)\) 因此 阅读全文
摘要:
引入 Prüfer 序列可以用于求解序列与树的双射,常用于组合计数问题。 定义 Prüfer 序列指的是每次选取一个编号最小的叶子,删除它,然后在序列中记录它所链接的点,重复以上步骤直到只剩下两个节点。 过程 对树建立 Prüfer 序列 显然可以用堆实现一个朴素的 \(\mathcal{O}(n 阅读全文
摘要:
引入 此算法可以解决图上生成树计数问题。 值得注意的是,矩阵树定理不能用于存在自环的图。 定义 设 \(G\) 是一个图。 记邻接矩阵 \(A(G)_{i,j} = \#e(i,j), \#e(i,j)\) 若 \(G\) 是无向图 记 \(D(G)\) 表示其度数矩阵,\(D(G)\) 满足 \( 阅读全文
摘要:
引入 LGV 引理可以解决图上不相交路径计数问题。 注意,LGV 引理只适用于有向无环图。 定义 \(\omega(P)\) 表示路径 \(P\) 的边权积。 记 \(e(u,v)\) 表示 \(u\) 到 \(v\) 的所有路径的边权积的和 \(e(u,v) = \sum\limits_{S:u 阅读全文
摘要:
引入 行列式是方阵的一个运算,对于方阵 \(A\),它的行列式记作 \(\text{det} A\) 也记作 \(|A|\)。 定义 全排列定义 记 \(\pi(p_1,p_2,\cdots,p_n)\) 是排列 \(p_1,p_2,\cdots,p_n\) 的逆序对数量。 \[\text{det} 阅读全文
摘要:
引入 高斯-约旦消元法(Gauss–Jordan elimination)是求解线性方程组的经典算法,它在当代数学中有着重要的地位和价值,是线性代数课程教学的重要组成部分。 高斯消元法除了用于线性方程组求解外,还可以用于行列式计算、求矩阵的逆,以及其他计算机和工程方面。 过程 一个经典的问题,给定一 阅读全文
摘要:
引入 矩阵的引入来自线性方程组,将其左边每一项的系数和右边的常数抽象出来就是矩阵。 \[\left\{ \begin{array}{} x_1 + 2x_2 = 4 \\ 2x_1 + 3x_2 = 5 \end{array} \right. \Leftrightarrow \left[ \begi 阅读全文
摘要:
过程 合并并不困难,对于两棵线段树,合并无疑就是就两棵线段树维护的区间信息进行合并。 就比如,有两棵线段树如下图: 将第二棵树合并到第一棵树,就是把除了维护 \([2, 2]\) 的全部对应加,而 \([2, 2]\) 则新开节点维护。 时间复杂度显然 \(\mathcal{O}(n \log n) 阅读全文