来糊点板子

打打板子


扩展欧拉定理

φ ( 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×(1p11)(1p21)...(1pk1)
{ 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} {abab%φ(p)(modp)abab%φ(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=0ny[i]i=jx[i]x[j]kx[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=0nyii=jijkjprei=j=0ikjsufi=j=iikjf(k)=i=0nyifac[i]×fac[ni]prei1×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=0i=0Aikk!xk=ex1ex(A+1)1

左偏树

每次合并都和右儿子合并

第 k 短路

建出最短路树

用可持久化可并堆维护所有点的祖先的最短非树边

Prufer序列

→ \to 序列:每次选择一个编号最小的叶节点并删掉它,然后在序列中记录下它连接到的那个节点,重复 n − 2 n-2 n2 次。

序列中的出现次数为度数-1

序列 → \to 树:选择编号最小的度数为 1 1 1 的点,与当前枚举到的点连边,然后两个点的度数-1

n n n 个点的完全图的生成树有 n n − 2 n^{n-2} nn2

二分图最大权匹配

(网络流我只会 dinic ,告辞

KM算法

每次等边组成的联通块扩大,然后增广。

马拉车算法、kmp、扩展kmp

中心思想就是尽量运用之前求过的信息,都挺显然的其实。

有负圈的费用流

先求最小费用可行流

然后在残余网络上把 s 到 t 的流流满。

SAM、后缀树

后缀树上的一个节点就是一个等价类,两个节点的 lca 是最长公共后缀。

nim 游戏

SG 函数为 0 则先手必败

posted @ 2022-10-10 20:18  缙云山车神  阅读(17)  评论(0编辑  收藏  举报