- 博客(23)
- 收藏
- 关注
原创 Polya
定义集合 GG 和作用与集合 GG 的二元运算 ××若其满足以下 44 个性质,则称其为一个群(Group)(Group),记为 ( G,× )( G,× ):1.1. 封闭性 (Closure)(Closure)若存在 aa 和 bb 满足 a∈G,b∈Ga∈G,b∈G ,则有 a×b∈Ga×b∈G2.2. 结合律 (Associativity)(Associativity)对于任意 a,b,ca,b,c 有 (a×b)×c=a×(b×c)(a×b)×c=a×(b×c)
2024-08-30 22:28:59 752
原创 一般图最大权匹配
匹配:对于图 G=(V,E)G=(V,E) 的一个匹配 MM 是边集 EE 的子集,其中两两不共用顶点。最大匹配:边数最多的匹配。完美匹配:包含原图所有点的匹配。最大权匹配:对于图 G(V,E)G(V,E),边 e∈Ee∈E 的权重为 w(e)w(e),最大权匹配 M=(V′,E′)M=(V′,E′) 为 ∑ew(e)∑ew(e) 最大的匹配。最大权最大匹配:最大权最大匹配 M(V′,E′)M(V′,E′) 为 ∑ew(e)∑ew(e) 最大的最大匹配。
2024-08-28 18:40:20 857
原创 Matrix-Tree 定理
对于一个矩阵 A[1...n][1...n]A[1...n][1...n] ,其行列式为(枚举排列 P[1...n]P[1...n] ,其中 μ(P)μ(P) 为排列 PP 的逆序对数)( det(A)det(A) 又作 ∣A∣∣A∣ )也就是说在每一挑一个乘起来,然后再拿逆序对有关的东西做系数。直接按照定义计算,复杂度是 O(n!⋅n)O(n!⋅n) 的。
2024-08-22 18:59:23 1015
原创 LGV 引理
当带下标时,指一条路径。定义 ω(P)=ω(P1)ω(P2)⋯ω(Pn)ω(P)=ω(P1)ω(P2)⋯ω(Pn)。如果我们能构造一个双射关系 f:C→Cf:C→C,满足对任意 Pc∈CPc∈C, ω(f(Pc))=ω(Pc)ω(f(Pc))=ω(Pc),sign(σ(f(Pc)))=−sign(σ(Pc))sign(σ(f(Pc)))=−sign(σ(Pc)),根据重排列定理,,逆序对数的奇偶改变,所以 sign(σ(P′))=−sign(σ(P))sign(σ(P′))=−sign(σ(P))。
2024-08-22 18:58:02 755
原创 栈
考虑一个容器,一端封死(称为栈底,bottom)。想向容器中加入元素,只能从另一端(称为栈顶,top)逐个加入。因为容器内的元素不能改变顺序,所以在从容器中去除物品只能按照从栈顶到栈底的顺序逐个取出。数组可以很好的模拟栈。数组的开头(0)一侧可以看作不可移动的栈底,只需要维护一个栈顶指针,表示栈顶的。一般而言,如果希望用 STL 实现 stack,可以考虑使用。作为封装好的栈,但是其底层内存分配逻辑是。栈(stack)是一种后进先出的数据结构。
2024-08-22 18:56:47 130
原创 【模板】常系数齐次线性递推
我们可以列出如下过程:fib5=fib4+fib3=2fib3+fib2=3fib2+2fib1=5fib1+3fib0fib5=fib4+fib3=2fib3+fib2=3fib2+2fib1=5fib1+3fib0。我们设aRaR为多项式aa的反转(第ll项和第00项互换,第l−1l−1项和第11项互换,以此类推),易得aR≡pRqR mod xl−k+1aR≡pRqRmodxl−k+1。那么需要解决的问题变为快速求一个l=2k−2l=2k−2次多项式对一个kk次多项式取模的结果。
2024-08-06 21:39:55 644
原创 最长公共子序列
动态规划自古以来是DALAODALAO凌虐萌新的分水岭,但有些OIer认为并没有这么重要——会打暴力,大不了记忆化。但是其实,动态规划学得好不好,可以彰显出一个OIerOIer的基本素养——,以及更重要的——。而我们首先要了解的,便是综合难度在所有动规题里最为简单的了。线性动规既是一切动规的基础,同时也可以广泛解决生活中的各项问题——比如在我们所在的三维世界里,四维的时间就是。
2024-07-16 22:20:44 766
原创 矩阵快速幂
什么是矩阵运算呢?在理解这个问题前,我们先要知道什么是矩阵百度百科给的定义如下矩阵是一个按照长方阵列排列的复数或实数集合复数实数什么的我们先不管,总之,矩阵就是一堆数,按照矩形排列形成的集合那么,我们所需要记录的也就是它的长、宽以及矩阵中存储的元素特殊的,长宽相等的矩阵我们定义它为方阵当两个矩阵的长宽相等时,我们认为这两个矩阵为同型矩形。
2024-07-16 22:18:24 313
原创 Dirichlet 前缀和
用倍数法进行贡献,时间复杂度为 O(nlogn)O(nlogn),更具体地这个 loglog 是 lnln,这样的复杂度可以拿到 8080 分。所以我们考虑以唯一分解定理为基础,进行高维前缀和的处理,从而做到优化时间复杂度的目的。因而,我们可以对于每一个素数开一维数组,处理高维前缀和——就如同二维、三维前缀和一般。类似于埃氏筛的时间复杂度证明,这份代码的时间复杂度为 O(nloglogn)O(nloglogn)。首先将素数用 O(n)O(n) 的欧拉筛筛出来,然后处理每个素数的贡献。
2024-07-16 22:16:43 317
原创 【模板】二次剩余
二次剩余,。也就是对于常数 nn 解这样一个方程:这里只介绍模数 pp 为奇素数的解法,也就是 Cipolla 算法。以下运算皆指模 pp 意义下的运算。
2024-07-13 22:12:59 642
原创 【模板】最小斯坦纳树
同时在第一种转移的时候,先枚举子集再枚举 ii,这样数组访问就很连续了;在求最短路时,所有转移都在 fSfS 中,比之前全部第二维为 SS 快多了。经过以上优化的代码可以通过 n=200,k=14n=200,k=14 的数据,尽管理论复杂度达到了惊人的 9×1089×108。另外如果图比较稀疏,使用 SPFA 可以加快你的平均运行效率,即使出题人将其卡满成 O(nm)O(nm) 依然不会成为复杂度瓶颈。在第一种转移的时候,内层枚举子集很不连续;在求最短路的时候,同样很不连续。
2024-07-13 22:10:25 111
原创 【模板】最小树形图 【落谷p4716】
把G中的环C收缩成点u,对于图G中两端都属于C的边就会被收缩掉,其他弧仍然保留,得到一个新的图G1,G1中以收缩点为终点的弧的长度要变化,变化的规则是:设点v在环C中,且环中指向v的边的权值为w,点v'不在环C中,则对于G中的每一条边<v', v>,在G1中有边<v', u>和其对应,且权值WG1(<v', u>) = WG(<v', v>) - w;如果要输出编号最小的根节点,多解的情况一定是有环,而超级源点最后选择的一条出边一定就是最优解(多加的边按照点的编号排序);,求出以给定节点为根的最小树形图;
2024-07-13 22:06:43 874
原创 【模板】常系数非齐次线性递推【落谷p5808】
在齐次线性递推中我们已经知道了∣λI−B1∣=λn−∑j=1nbiλn−i∣λI−B1∣=λn−j=1∑nbiλn−i,而λI−B3λI−B3是一个下三角矩阵,故∣λI−B3∣=(λ−1)k+1∣λI−B3∣=(λ−1)k+1,那么∣λI−B∣=(λ−1)k+1(λn−∑j=1nbiλn−i)∣λI−B∣=(λ−1)k+1(λn−j=1∑nbiλn−i)。那么A(x)=P(x)1−B(x)A(x)=1−B(x)P(x),求逆卷一下然后多点求值就可以得到A(x)A(x)的前n+kn+k项。
2024-07-13 21:52:09 769
原创 【模板】快速阶乘算法
问就是多项式连续点值平移,用 hd(0),hd(1),⋯ ,hd(d)hd(0),hd(1),⋯,hd(d) 直接平移出 hd(d+1),hd(d+2),⋯ ,hd(2d+1)hd(d+1),hd(d+2),⋯,hd(2d+1) 就可以了(这里因为要求区间不交,会额外平移出 hd(2d+1)hd(2d+1))。同理,我们考虑 gd(x)=∏i=1d(x+i+1011),hd(i)=gd(is)gd(x)=i=1∏d(x+i+1101),hd(i)=gd(is)。
2024-07-13 21:46:06 1068
原创 Berlekamp-Massey算法
Berlekamp-Massey算法,简称BM算法,是用来求解一个数列最短线性递推式的算法,时间复杂度为 O(n2)O(n2)。
2024-07-13 21:43:17 659
原创 Berlekamp-Massey算法
Berlekamp-Massey算法,简称BM算法,是用来求解一个数列最短线性递推式的算法,时间复杂度为 O(n2)O(n2)。
2024-07-09 21:47:44 653
原创 【模板】整式递推
取 fs(x)fs(x) 在 0,s,2s,…,⌊(n′−s)/s⌋s 处的值乘起来,再乘一小段 Ms⌊n′/s⌋∼Mn′−1Ms⌊n′/s⌋∼Mn′−1 即可。与 P5282 不同的是,这里 fw(x)fw(x) 是一个 wdwd 次多项式,需要 wd+1wd+1 个点值来确定它。别忘了还要计算 P0(m)∼P0(n)P0(m)∼P0(n) 的乘积,在倍增维护矩阵乘积的同时搞一下就好。总时间复杂度就是 O(nd(m3+m2log(nd)))O(nd(m3+m2log(nd)))。
2024-07-09 21:45:40 293
原创 runs 知识点
因为任何循环同构都比 rr 大,可以推出 ss 是 rr 的前缀,又因为 rr 是最短周期,所以 rr 必然没有大于等于原串长度一半的 border,则令 r=s+t+sr=s+t+s。同时可以发现 j+1j+1 后缀与 ii 后缀的大小关系取决于 sr+1sr+1 与 sr+1−psr+1−p 的大小关系(就是之前取最长公共前缀的两个后缀)。由 rr 是所有循环同构中最小的,可得 s+t+s≤s+s+ts+t+s≤s+s+t,s+t+s≤t+s+ss+t+s≤t+s+s 从而推得矛盾。
2024-07-09 21:42:44 654
原创 偏序集的讲解
对于元素 xx,如果 x<yx<y 且不存在 zz 使得 x<z<yx<z<y,那么 yy 就是 xx 的覆盖元素,在哈斯图中连出一条 x−>yx−>y 的有向边。通过覆盖关系生成的图就是哈斯图。例如,集合 {1,2,3,4,6,8,12}{1,2,3,4,6,8,12} 上的关系 { (a,b)(a,b) | aa 整除 bb } 画出的哈斯图就是看起来哈斯图并不是有向图,这是否与上面所说的违背?其实不然,在哈斯图中,把较大元放在较小元的上方,以此来隐式地表示有向。
2024-07-09 20:57:21 653
原创 void 函数
首先,就如字面上的意思,它不会返回一个值给主函数,所以不void类型的函数中不需要用到return,就算是用也必须是return;就如字面上的意思,返回值是子函数返回给主函数的一个值,主函数将实参传递给子函数的形参,经过子函数的函数体运算后得到一个值,再通过return将值传递给主函数。void属于函数类型中的无类型函数之对应的还有实型(float,double),整型(int),布尔型(bool)和字符型(char)。值得一提是子函数的返回值类型是和函数声明中的参数类型一致的。以上就是函数的总介绍。
2023-10-28 16:45:28 520 1
原创 c++ for的使用方法
一般而言,兔子在出生两个月后,就有繁殖能力。假设一对兔子每个月能生出一对小兔子来,如果所有兔子都不死,那么N个月以后有多少对兔子?for 一般用于多重循环,当有空缺时,可以用 if 来弥补缺漏,非常适合配合 for 循环来用;i++){ // 开启for循环。for(int 变量;int "变量" = "一个数";好了,今天的for循环就到这里了,让我们下回再见!这道题就相当于一道非常简单的for循环;
2023-07-25 16:21:58 630
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人