来糊点板子
打打板子
扩展欧拉定理
φ
(
n
)
=
n
×
(
1
−
1
p
1
)
(
1
−
1
p
2
)
.
.
.
(
1
−
1
p
k
)
\varphi(n)=n\times(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_k})
φ(n)=n×(1−p11)(1−p21)...(1−pk1)
{
a
b
≡
a
b
%
φ
(
p
)
(
m
o
d
p
)
b
<
φ
(
p
)
a
b
≡
a
b
%
φ
(
p
)
+
φ
(
p
)
(
m
o
d
p
)
b
≥
φ
(
p
)
\begin{cases} a^b\equiv a^{b\%\varphi(p)}\pmod{p} &b<\varphi(p)\\ a^b\equiv a^{b\%\varphi(p)+\varphi(p)}\pmod{p} &b\ge\varphi(p) \end{cases}
{ab≡ab%φ(p)(modp)ab≡ab%φ(p)+φ(p)(modp)b<φ(p)b≥φ(p)
笛卡尔树
堆维护最右链
平衡树区间翻转
fhq treap 上打 tag
exBSGS
把一般 BSGS 的块长改成 t = 2 φ ( p ) t=\sqrt{2\varphi(p)} t=2φ(p)
遇到相同的 a k t a^{kt} akt 就保留前两个
最后把可能的解拿出来check
拉格朗日插值
f ( k ) = ∑ i = 0 n y [ i ] ∏ i ≠ j k − x [ j ] x [ i ] − x [ j ] f(k)=\sum_{i=0}^n y[i]\prod_{i\ne j}\frac{k-x[j]}{x[i]-x[j]} f(k)=i=0∑ny[i]i=j∏x[i]−x[j]k−x[j]
取值连续:
f
(
k
)
=
∑
i
=
0
n
y
i
∏
i
≠
j
k
−
j
i
−
j
p
r
e
i
=
∏
j
=
0
i
k
−
j
s
u
f
i
=
∏
j
=
i
i
k
−
j
f
(
k
)
=
∑
i
=
0
n
y
i
p
r
e
i
−
1
×
s
u
f
(
i
+
1
)
f
a
c
[
i
]
×
f
a
c
[
n
−
i
]
f(k)=\sum_{i=0}^n y_i\prod_{i\ne j}\frac{k-j}{i-j}\\ pre_i=\prod _{j=0}^i k-j\\ suf_i=\prod_{j=i}^i k-j\\ f(k)=\sum_{i=0}^ny_i\cfrac{pre_{i-1}\times suf(i+1)}{fac[i]\times fac[n-i]}
f(k)=i=0∑nyii=j∏i−jk−jprei=j=0∏ik−jsufi=j=i∏ik−jf(k)=i=0∑nyifac[i]×fac[n−i]prei−1×suf(i+1)
自然数幂和
∑ i = 1 n i k \sum_{i=1}^n i^k ∑i=1nik 是一个以 n n n 为自变量的 k + 1 k+1 k+1 次多项式,可以插值
或者直接写出它的 EGF , ∑ k = 0 ∞ ∑ i = 0 A i k x k k ! = e x ( A + 1 ) − 1 e x − 1 \sum_{k=0}^{\infty}\sum_{i=0}^{A}i^k\frac{x^k}{k!} =\frac{e^{x(A+1)-1}}{e^x-1} ∑k=0∞∑i=0Aikk!xk=ex−1ex(A+1)−1
左偏树
每次合并都和右儿子合并
第 k 短路
建出最短路树
用可持久化可并堆维护所有点的祖先的最短非树边
Prufer序列
树 → \to → 序列:每次选择一个编号最小的叶节点并删掉它,然后在序列中记录下它连接到的那个节点,重复 n − 2 n-2 n−2 次。
序列中的出现次数为度数-1
序列 → \to → 树:选择编号最小的度数为 1 1 1 的点,与当前枚举到的点连边,然后两个点的度数-1
n n n 个点的完全图的生成树有 n n − 2 n^{n-2} nn−2
二分图最大权匹配
(网络流我只会 dinic ,告辞
KM算法
每次等边组成的联通块扩大,然后增广。
马拉车算法、kmp、扩展kmp
中心思想就是尽量运用之前求过的信息,都挺显然的其实。
有负圈的费用流
先求最小费用可行流
然后在残余网络上把 s 到 t 的流流满。
SAM、后缀树
后缀树上的一个节点就是一个等价类,两个节点的 lca 是最长公共后缀。
nim 游戏
SG 函数为 0 则先手必败