最长不下降子序列
这里的注释说明更易理解
1 |
|
这里的注释说明更易理解
1 | #include <bits/stdc++.h> |
Kruskal 算法
1 | #include <bits/stdc++.h>//kruskal算法 |
由欧拉定理可知,对 \(a\in \mathbf{Z}\),\(m\in\mathbf{N}^{*}\),若 \((a,m)=1\),则 \(a^{\varphi(m)}\equiv 1\pmod m\).
内容: 对于素数 \(p\) 有 \((p-1)!\equiv -1\pmod p.\)
推论: \((p-1)!\equiv0(mod\) \(p),(p>4\land p\) 为合数$ )$
计算余数算法:
实现 \(n!\) % \(p\).
以下是一个 \(O(n+m)\) 的实现( \(n,m\) 分别表示点数和边数),利用了队列: 一般使用的是邻接表存储图
1 | // deg 是入度,在存图的时候需要录入数据 |
返回值为是否成功进行拓扑排序,也即是否存在环。也就是说拓扑排序是可以用来简单地判环的。有时会要求输出字典序最小的方案,这时把
queue 改成 priority_queue 即可,复杂度会多一个
\(\log\)。 [[B3644 拓扑排序 &
家谱树 - 洛谷]][B3644 【模板】拓扑排序 / 家谱树 -
洛谷](https://www.luogu.com.cn/problem/B3644) 练习: [[510C]] Problem - C -
Codeforces
线性筛法(也称为 \(Euler\) 筛法(欧拉筛法)) 最常用!
1 | void init(int n) { |
\(Eratosthenes\) 筛法即埃拉托斯特尼筛法, 简称埃氏筛法。时间复杂度是 \(O(n\log\log n)\)。
1 | #include <bits/stdc++.h> |
给定 \(n\) 个正整数组成的数列 \(a_1, a_2, \cdots, a_n\) 和 \(m\) 个区间 \([l_i,r_i]\),分别求这 \(m\) 个区间的区间和。 ## 3 输入格式 \[ \boxed{ \begin{align} &n &\\ &a_{1} \ a_2 \cdots \ a_n \\ &m \\&l_1\ \ r_1 \\&l_2\ \ r_2\\ &\vdots \\&l_m\ r_m \end{align} } \]
设取 \(x_0\), \(y_0\) 时,\(ax+by\) 的最小整数是 \(s\).即 \(ax_0+by_0\) = \(s\)
因 \(gcd(a,b)|ax_0\) , \(gcd(a,b)|ay_0\)