edit 数学,数据结构
This commit is contained in:
Vendored
+2
-7
@@ -139,19 +139,14 @@
|
||||
"label": ""
|
||||
},
|
||||
{
|
||||
"line": 14,
|
||||
"line": 19,
|
||||
"column": 17,
|
||||
"label": ""
|
||||
},
|
||||
{
|
||||
"line": 25,
|
||||
"line": 29,
|
||||
"column": 16,
|
||||
"label": ""
|
||||
},
|
||||
{
|
||||
"line": 30,
|
||||
"column": 17,
|
||||
"label": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+19
-17
@@ -14,8 +14,8 @@
|
||||
- [P1725题解](#p1725题解)
|
||||
- [P1725代码](#p1725代码)
|
||||
- [单调栈](#单调栈)
|
||||
- [单调栈例题](#单调栈例题)
|
||||
- [并查集](#并查集)
|
||||
- [并查集基础](#并查集基础)
|
||||
- [并查集查询](#并查集查询)
|
||||
- [并查集合并](#并查集合并)
|
||||
- [带权并查集](#带权并查集)
|
||||
@@ -234,27 +234,29 @@ int main()
|
||||
|
||||
## 单调栈
|
||||
|
||||
### 单调栈例题
|
||||
|
||||
类似于单调队列,每次向单调栈中插入一个元素,就要 pop 掉栈顶小于这个元素的值,再插入。与单调队列不同的是,单调栈不支持从底部弹出。
|
||||
|
||||
---
|
||||
|
||||
## 并查集
|
||||
|
||||
### 并查集基础
|
||||
|
||||
#### 并查集查询
|
||||
### 并查集查询
|
||||
|
||||
对于给定的 $a$,沿着树向上移动知道根节点即可。在合并的过程中的每个节点都属于这个集合,所以将父亲节点直接设为根即可。
|
||||
|
||||
#### 并查集合并
|
||||
### 并查集合并
|
||||
|
||||
合并两个集合时,可以将一个集合的根节点设为另一个集合的根节点。为了防止退化,可以将节点较少或深度较小的一棵树连接到令一颗上,这种合并方法称作按秩合并。
|
||||
|
||||
### 带权并查集
|
||||
## 带权并查集
|
||||
|
||||
我们可以在并查集的边上维护某种值,在路径压缩时产生运算。
|
||||
|
||||
#### 带权并查集例题
|
||||
### 带权并查集例题
|
||||
|
||||
##### P2024 NOI2001食物链
|
||||
#### P2024 NOI2001食物链
|
||||
|
||||
[题目链接](https://www.luogu.com.cn/problem/P2024)
|
||||
|
||||
@@ -275,7 +277,7 @@ int main()
|
||||
|
||||
你的任务是根据给定的 $N$ 和 $K$ 句话,输出假话的总数。
|
||||
|
||||
###### P2024题解
|
||||
##### P2024题解
|
||||
|
||||
考虑维护带权并查集,对每次给定的话进行查询与合并。
|
||||
|
||||
@@ -285,7 +287,7 @@ int main()
|
||||
|
||||

|
||||
|
||||
### 可撤销并查集
|
||||
## 可撤销并查集
|
||||
|
||||
对于一开始相互独立的 $n$ 个点,维护以下两种操作共 $q$ 次:
|
||||
|
||||
@@ -298,9 +300,9 @@ int main()
|
||||
|
||||
因为要保证可逆,所以不能路径压缩,只能启发式合并。
|
||||
|
||||
### 并查集例题
|
||||
## 并查集例题
|
||||
|
||||
#### 并查集例题1
|
||||
### 并查集例题1
|
||||
|
||||
有 $n$ 个点,初始时均为孤立点。
|
||||
|
||||
@@ -310,13 +312,13 @@ int main()
|
||||
|
||||
$1 \le n, m, q \le 10^5$
|
||||
|
||||
##### 并查集例题1题解
|
||||
#### 并查集例题1题解
|
||||
|
||||
考虑对于每一次合并的 $a_i, b_i$,若两个点不联通,则在另外一颗树中连接 $a_i, b_i$,边权为 $i$。
|
||||
|
||||
每次查询就是在令一颗树中找到 $u, v$ 路径上边权最大值,可以使用树上倍增维护。
|
||||
|
||||
#### 并查集例题2
|
||||
### 并查集例题2
|
||||
|
||||
有一个长度为 $n$ 的 $01$ 序列 $a_1, \dots, a_n$,一开始全是 $0$。接下来进行如下 $m$ 次操作:
|
||||
|
||||
@@ -325,7 +327,7 @@ $1 \le n, m, q \le 10^5$
|
||||
|
||||
$1 \le n, m \le 10^6$
|
||||
|
||||
##### 并查集例题2题解
|
||||
#### 并查集例题2题解
|
||||
|
||||
建立并查集,使得 $i$ 所在联通块的根节点为 $i$ 后面第一次出现 $0$ 的位置,初始 $f_i = i$
|
||||
|
||||
@@ -333,7 +335,7 @@ $1 \le n, m \le 10^6$
|
||||
|
||||
每次查询输出 $x$ 的祖先。
|
||||
|
||||
#### 并查集例题3
|
||||
### 并查集例题3
|
||||
|
||||
给定一颗 $n$ 个节点的树,接下来有 $m$ 次操作:
|
||||
|
||||
@@ -344,7 +346,7 @@ $1 \le n, m \le 10^6$
|
||||
|
||||
$1 \le n, m \le 10^6$
|
||||
|
||||
##### 并查集例题3题解
|
||||
#### 并查集例题3题解
|
||||
|
||||
前置知识:[强联通分量](../4.树上问题及图论/树上问题及图论.md#强联通分量)
|
||||
|
||||
|
||||
+65
-70
@@ -3,22 +3,22 @@
|
||||
待办:修改格式
|
||||
|
||||
- [数学](#数学)
|
||||
- [费马小定理,逆元,同余](#费马小定理逆元同余)
|
||||
- [初等数论](#初等数论)
|
||||
- [同余](#同余)
|
||||
- [同余的表示](#同余的表示)
|
||||
- [同余的性质](#同余的性质)
|
||||
- [费马小定理](#费马小定理)
|
||||
- [裴蜀定理](#裴蜀定理)
|
||||
- [逆元](#逆元)
|
||||
- [求解逆元](#求解逆元)
|
||||
- [线性求解逆元](#线性求解逆元)
|
||||
- [费马小定理,逆元,同余例题](#费马小定理逆元同余例题)
|
||||
- [逆元例题](#逆元例题)
|
||||
- [B3717 组合数问题](#b3717-组合数问题)
|
||||
- [B3717题解](#b3717题解)
|
||||
- [P3403 跳楼机](#p3403-跳楼机)
|
||||
- [P3403题解](#p3403题解)
|
||||
- [P3403代码](#p3403代码)
|
||||
- [欧几里得算法和中国剩余定理](#欧几里得算法和中国剩余定理)
|
||||
- [欧几里得算法](#欧几里得算法)
|
||||
- [前置知识:裴蜀定理](#前置知识裴蜀定理)
|
||||
- [扩展欧几里得](#扩展欧几里得)
|
||||
- [扩展欧几里得参考代码](#扩展欧几里得参考代码)
|
||||
- [欧几里得算法例题](#欧几里得算法例题)
|
||||
@@ -37,27 +37,26 @@
|
||||
- [扩展(EXCRT):模数不互质](#扩展excrt模数不互质)
|
||||
- [EXCRT两个方程](#excrt两个方程)
|
||||
- [EXCRT多个方程](#excrt多个方程)
|
||||
- [组合数学与矩阵初步](#组合数学与矩阵初步)
|
||||
- [组合数学部分](#组合数学部分)
|
||||
- [组合数的定义](#组合数的定义)
|
||||
- [离散与组合数学](#离散与组合数学)
|
||||
- [多重集合](#多重集合)
|
||||
- [组合数](#组合数)
|
||||
- [组合恒等式](#组合恒等式)
|
||||
- [二项式定理](#二项式定理)
|
||||
- [二项式反演](#二项式反演)
|
||||
- [矩阵部分](#矩阵部分)
|
||||
- [矩阵简介](#矩阵简介)
|
||||
- [矩阵加减法](#矩阵加减法)
|
||||
- [矩阵数乘](#矩阵数乘)
|
||||
- [矩阵转置](#矩阵转置)
|
||||
- [矩阵乘法](#矩阵乘法)
|
||||
- [线性代数](#线性代数)
|
||||
- [向量](#向量)
|
||||
- [向量的运算](#向量的运算)
|
||||
- [矩阵](#矩阵)
|
||||
- [矩阵的运算](#矩阵的运算)
|
||||
- [行列式](#行列式)
|
||||
- [$n$ 阶行列式](#n-阶行列式)
|
||||
- [行列式的意义](#行列式的意义)
|
||||
- [组合数学与矩阵初步例题](#组合数学与矩阵初步例题)
|
||||
- [矩阵例题](#矩阵例题)
|
||||
- [P1962 斐波那契数列](#p1962-斐波那契数列)
|
||||
- [P1962矩阵解法](#p1962矩阵解法)
|
||||
- [P1962非矩阵解法](#p1962非矩阵解法)
|
||||
|
||||
## 费马小定理,逆元,同余
|
||||
## 初等数论
|
||||
|
||||
### 同余
|
||||
|
||||
@@ -91,6 +90,18 @@ $$
|
||||
a \pm c \equiv b \pm d \pmod m, a \times c \equiv b \times d \pmod m
|
||||
$$
|
||||
|
||||
### 费马小定理
|
||||
|
||||
对于正整数 $a$ 和质数 $p$,若 $a$ 不能被 $p$ 整除,则 $a^{p - 1} \equiv 1 \pmod p$
|
||||
|
||||
费马小定理可以用于求解逆元,见[求解逆元](#求解逆元)
|
||||
|
||||
### 裴蜀定理
|
||||
|
||||
$a, b$ 为非零整数,设 $d = \gcd(a, b)$,则方程 $ax + by = m$ 有解当且仅当 $m$ 为 $d$ 的倍数。
|
||||
|
||||
要求解这个方程,可以使用[扩展欧几里德算法](#扩展欧几里得)
|
||||
|
||||
### 逆元
|
||||
|
||||
当 $ab \equiv 1 \pmod m$,则称在模 $m$ 意义下 $a, b$ 互为逆元。
|
||||
@@ -139,7 +150,7 @@ $$
|
||||
|
||||
而因为 $1 \le (n \bmod x) \le x$,则一定可以从已有的值推出 $x^{-1}$
|
||||
|
||||
### 费马小定理,逆元,同余例题
|
||||
### 逆元例题
|
||||
|
||||
#### B3717 组合数问题
|
||||
|
||||
@@ -242,33 +253,17 @@ signed main()
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 欧几里得算法和中国剩余定理
|
||||
|
||||
### 欧几里得算法
|
||||
|
||||
对于任意的正整数 $a \ge b$,若 $a \equiv 0 \pmod b$, $\gcd(a, b) = b$,否则令 $a = kb + a \bmod b$
|
||||
|
||||
设 $S_i$ 表示 $i$ 的因数集合,注意到 $S_x \cap S_b = S_a \cap S_b$,所以可以得到如下推论:
|
||||
|
||||
$$\gcd(a, b) = \gcd(b, a \bmod b)$$
|
||||
|
||||
因此通过
|
||||
其实就是辗转相除法。
|
||||
|
||||
```cpp
|
||||
int gcd(int a, int b){ return !b ? a : gcd(b, a % b);}
|
||||
```
|
||||
|
||||
即可求出 gcd
|
||||
|
||||
### 前置知识:裴蜀定理
|
||||
|
||||
$a, b$ 为非零整数,则存在整数 $x, y$,使得 $ax + by = \gcd(a, b)$
|
||||
|
||||
### 扩展欧几里得
|
||||
|
||||
对于任意正整数 $a, b$,考虑一元二次方程 $ax + by = c$ 的整数解
|
||||
对于任意正整数 $a, b$,考虑一元二次方程 $ax + by = c$ 的整数解.
|
||||
|
||||
对于任意整数 $x$,存在 $y = \frac{c - ax}{b}$ 为唯一解,所以只需要考虑这个式子是否为整数,即是否存在 $x$ 使得
|
||||
|
||||
@@ -417,7 +412,7 @@ $$
|
||||
|
||||
##### CF1010C题解
|
||||
|
||||
根据[裴蜀定理](#前置知识裴蜀定理):
|
||||
根据[裴蜀定理](#裴蜀定理):
|
||||
|
||||
$$
|
||||
\sum_{i = 1}^{n}c_i a_i = c
|
||||
@@ -425,7 +420,7 @@ $$
|
||||
|
||||
有解当且仅当 $c$ 是 $\gcd(a_1, \dots , a_n)$ 的倍数,也就是说原式的线性组合一定是 $\gcd(a_1, \dots , a_n)$ 的倍数。
|
||||
|
||||
这是二维[裴蜀定理](#前置知识裴蜀定理)( $ax + by = c$ 有解,当且仅当 $c$ 是 $\gcd(a, b)$ 的倍数)的扩展
|
||||
这是二维[裴蜀定理](#裴蜀定理)( $ax + by = c$ 有解,当且仅当 $c$ 是 $\gcd(a, b)$ 的倍数)的扩展
|
||||
|
||||
考虑将方程变形:
|
||||
|
||||
@@ -587,7 +582,7 @@ $$
|
||||
m_1p - m_2q = a_2 - a_1
|
||||
$$
|
||||
|
||||
根据[裴蜀定理](#前置知识裴蜀定理),当 $a_2 - a_1$ 不能被 $\gcd(a, b)$ 整除,无解。
|
||||
根据[裴蜀定理](#裴蜀定理),当 $a_2 - a_1$ 不能被 $\gcd(a, b)$ 整除,无解。
|
||||
|
||||
否则可以用[扩展欧几里得算法](#扩展欧几里得)解出一组可行解。
|
||||
|
||||
@@ -597,11 +592,13 @@ $$
|
||||
|
||||
---
|
||||
|
||||
## 组合数学与矩阵初步
|
||||
## 离散与组合数学
|
||||
|
||||
### 组合数学部分
|
||||
### 多重集合
|
||||
|
||||
#### 组合数的定义
|
||||
多重集合是集合概念的推广,不满足集合的互异性,因此**多重集合不是集合**。多重集合有两种表示方法: $\{a_1, \dots, a_1, a_2, \dots, a_2, \dots\}, \{n_1 \times a_1, n_2 \times a_2, \dots\}$。当 $n_i = \infty$ 时表示有无穷个 $a_i$。
|
||||
|
||||
### 组合数
|
||||
|
||||
从 $n$ 个物品选 $m$ 个的方案数
|
||||
|
||||
@@ -623,7 +620,7 @@ $$
|
||||
\sum^k_{i = 0}{n \choose i}{m \choose {k - i}} = {{n + m} \choose k}
|
||||
$$
|
||||
|
||||
#### 二项式定理
|
||||
### 二项式定理
|
||||
|
||||
$$
|
||||
(x + y)^n = \sum^n_{k = 0}{n \choose k}x^{k}y^{n - k}
|
||||
@@ -631,7 +628,7 @@ $$
|
||||
|
||||
其实就是展开式的通项公式。
|
||||
|
||||
#### 二项式反演
|
||||
### 二项式反演
|
||||
|
||||
若已知函数 $g$:
|
||||
|
||||
@@ -643,11 +640,27 @@ $$f_n = \sum^{n}_{i = 0}(-1)^{n - i}{n \choose i}g_i$$
|
||||
|
||||
证明就算了吧。。。
|
||||
|
||||
### 矩阵部分
|
||||
---
|
||||
|
||||
#### 矩阵简介
|
||||
## 线性代数
|
||||
|
||||
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数以及常数所构成的方阵。
|
||||
### 向量
|
||||
|
||||
向量一般是用于表示一个点或者一个点到另外一个点的偏移量。用于表示一个点时,这个向量就代表原点到这个点的偏移量。一个向量可以表示为 $(a_1, a_2, \dots)$ 或者 $\left(\begin{aligned}a_1 \\ a_2 \\ \dots\end{aligned}\right)$。向量可分为行向量和列向量。
|
||||
|
||||
#### 向量的运算
|
||||
|
||||
设 $u = (u_1, u_2 \dots), v = (v_1, v_2, \dots)$
|
||||
|
||||
- $u \plusmn v = (u_1 \plusmn v_1, u_2 \plusmn v_2, \dots)$
|
||||
- $su = (s \cdot u_1, s \cdot u_2, \dots)$
|
||||
- $u \cdot v = u_1 \cdot v_1 + u_2 \cdot v_2 + \dots = ||u||\ ||v|| \cos \theta$
|
||||
- $u \times v = u_1 \cdot v_2 - u_2 \cdot v_1$
|
||||
- $||u|| = \sqrt{u \cdot u} = \sqrt{u_1^2 + u_2^2 + \dots}$
|
||||
|
||||
### 矩阵
|
||||
|
||||
矩阵 (Matrix) 是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数以及常数所构成的方阵。
|
||||
|
||||
由 $m \times n$ 个数 $a_{i, j}$ 排成的 $m$ 行 $n$ 列的数表称为 $m$ 行 $n$ 列的矩阵,简称 $m \times n$ 矩阵。记作:
|
||||
|
||||
@@ -664,37 +677,19 @@ $$
|
||||
|
||||
这 $m \times n$ 个数称作矩阵 $A$ 的元素,简称为**元**,数 $a_{i, j}$ 位于矩阵 $A$ 的 $(i, j)$ 元,以数 $a_{i, j}$ 为 $(i, j)$ 元的矩阵记作 $(a_{i, j})$ 或 $(a_{i, j})_{m \times n}$
|
||||
|
||||
#### 矩阵加减法
|
||||
#### 矩阵的运算
|
||||
|
||||
只有同型矩阵才支持加减法。
|
||||
|
||||
对应元素相加减即可。
|
||||
|
||||
显然满足交换律,结合律。
|
||||
|
||||
#### 矩阵数乘
|
||||
|
||||
每个元素都乘这个数即可。
|
||||
|
||||
显然满足交换律,结合律和分配律。
|
||||
|
||||
#### 矩阵转置
|
||||
|
||||
矩阵转置即交换每个元素的行与列下标。
|
||||
|
||||
矩阵 $A$ 的转置记作 $A^T$
|
||||
- 加减法:只有同型矩阵才支持加减法。对应元素相加减即可。显然满足交换律,结合律。
|
||||
- 数乘:每个元素都乘这个数即可。显然满足交换律,结合律和分配律。
|
||||
- 转置:矩阵转置即交换每个元素的行与列下标。矩阵 $A$ 的转置记作 $A^T$
|
||||
|
||||
$$
|
||||
(A^T)^T = A \\
|
||||
(aA)^T = a(A^T) \\
|
||||
(AB)^T = A^TB^T
|
||||
(AB)^T = A^TB^T \\
|
||||
$$
|
||||
|
||||
(a为常数)
|
||||
|
||||
#### 矩阵乘法
|
||||
|
||||
不同于加减法,矩阵乘法的要求是第一个矩阵的列数等于另一个矩阵的行数。一个 $n \times r$ 的矩阵乘一个 $r \times m$ 的矩阵得到的是一个 $n \times m$ 的矩阵 设
|
||||
- 乘法:不同于加减法,矩阵乘法的要求是第一个矩阵的列数等于另一个矩阵的行数。一个 $n \times r$ 的矩阵乘一个 $r \times m$ 的矩阵得到的是一个 $n \times m$ 的矩阵 设
|
||||
|
||||
$$C = AB$$
|
||||
|
||||
@@ -761,7 +756,7 @@ $$
|
||||
|
||||
三维同理。
|
||||
|
||||
### 组合数学与矩阵初步例题
|
||||
### 矩阵例题
|
||||
|
||||
#### P1962 斐波那契数列
|
||||
|
||||
|
||||
Reference in New Issue
Block a user