摘要: 「算法笔记」点分治 一、基本思想 点分治是用来解决树上路径问题的一种方法。简单地写一下 QwQ。 首先,给这棵树钦定一个根(不妨设为 \(x\)),再将这棵树上的所有简单路径分为两个部分: 第一部分:经过 \(x\) 的简单路径(设路径的两端为 \((u,v)\),下同。\(u,v\) 在根 \(x\) 的不同子树内) 阅读全文
posted @ 2021-02-23 16:41 maoyiting 阅读(150) 评论(0) 推荐(1) 编辑
摘要: 记了寒假集训某天上午部分的内容,纠结了一下还是不公开了。普通生成函数:对于一个无穷序列 {a0,a1,a2,⋯},定义其 普通生成函数 为形式幂级数:∑{k=0->∞}=ak⋅x^k。 指数生成函数:对于一个无穷序列 {a0,a1,a2,⋯},定义其 指数生成函数 为级数 ∑{k=0->∞}=ak⋅x^k/k!。 阅读全文
posted @ 2021-02-20 20:09 maoyiting 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 原根具有和单位根一样的性质(证明略),NTT 其实就是把 FFT 中的单位根换成了原根。然后 NTT 就学完啦! NTT 解决的是多项式乘法带模数的情况,可以说有些受模数的限制,多项式系数应为整数。 阅读全文
posted @ 2021-02-17 21:14 maoyiting 阅读(383) 评论(2) 推荐(1) 编辑
摘要: *2800。异或差分(b[i]=a[i] xor a[i+1])、BFS、状压 DP。直接思考有些困难,需要对问题进行转化,有条有理地分析,有一定的思维难度。Description 有一个 01 序列 a1,a2,⋯,an,初始时全为 0。给定 m 个长度,分别为 l1∼lm。每次可以选择一个长度为某个 li 区间,对其进行翻转操作(0→1,1→0)。 求最少的操作次数,使得最后有且仅有 k 个位置为 1(k 个位置给定),其余为 0。 1≤n≤10^4,1≤k≤10,1≤m≤100。 阅读全文
posted @ 2021-02-17 14:17 maoyiting 阅读(191) 评论(0) 推荐(1) 编辑
摘要: 「算法笔记」BSGS 与 exBSGS 一、离散对数 给定 \(a,b,m\),存在一个 \(x\),使得 \(\displaystyle a^x\equiv b\pmod m\) 则称 \(x\) 为 \(b\) 在模 \(m\) 意义下以 \(a\) 为底的 离散对数。 二、BSGS 离散对数:求解关于 \(x\) 的方程 \(a^x 阅读全文
posted @ 2021-02-16 12:56 maoyiting 阅读(238) 评论(2) 推荐(0) 编辑
摘要: 一道构造题。首先可以发现,对于 1≤x<1e18,有:f(x+1e18)−f(x)=1。也就是说,当 [l,r] 从 [x+1,x+1e18] 变成 [x+2,x+1e18+1] 时(整体增大 1),由于 f(x+1e18+1)−f(x+1)=1,因此结果会增加 1。 阅读全文
posted @ 2021-02-10 13:24 maoyiting 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 「算法笔记」快速傅里叶变换(FFT) 一、引入 首先,定义多项式的形式为 \(f(x)=\sum_{i=0}^n a_ix^i\),其中 \(a_i\) 为系数,\(n\) 为次数,这种表示方法称为“系数表示法”,一个多项式是由其系数确定的。 可以证明,\(n+1\) 个点可以唯一确定一个 \(n\) 次多项式。对于 \(f(x)\), 阅读全文
posted @ 2021-02-08 19:36 maoyiting 阅读(420) 评论(0) 推荐(1) 编辑
摘要: 1. 对于每个限制 (a∨b)(变量 a,b 至少满足一个),节点 ¬a 向节点 b 连边,从节点 ¬b 向节点 a 连边。 2. 用 Tarjan 算法对建出的图缩点。 3. 对于 i∈[1,n],若 i 与 i+n 在同一个强连通分量中,则不存在一组合法的赋值方案。 4. 否则,根据 Tarjan 求得的强连通分量的标号为拓扑逆序,即反向的拓扑序 ,可以得到 xi 的值(取 i 与 i+n 所在强连通分量拓扑序较大的点的值)。 当 k>2 时该问题为 NP 完全的,只能暴力求解。因此一般讨论的是 k=2 的情况,即 2-SAT 问题。 阅读全文
posted @ 2021-02-06 12:24 maoyiting 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 一、简介 Link-Cut Tree (简称 LCT) 是一种用来维护动态森林连通性的数据结构,适用于动态树问题。类比树剖,树剖是通过静态地把一棵树剖成若干条链然后用一种支持区间操作的数据结构维护,而 LCT 则是动态地去处理这个问题。这里引入实链剖分。 实链剖分: 与重链剖分类似,同样将与某一个儿子的连边划分为 实边,其余儿子的连边为 虚边。 对于一个点连向它儿子的所有边,选择⼀条边为实边,其他边为虚边。虚实之间是可以进行 转换 的。对于⼀条由实边组成的链,我们称之为 实链。 阅读全文
posted @ 2021-01-09 15:19 maoyiting 阅读(369) 评论(6) 推荐(1) 编辑
摘要: 「算法笔记」Splay 这个板子写得有点丑……建议去别的博客 QAQ。 一、简介 Splay(伸展树)是平衡树中的一种。它通过不断将某个节点旋转到根节点的位置,使整棵树仍满足 BST 的性质,并且保持平衡而不至于退化为链。 频繁访问的节点会被移动到离根节点较近的位置,进而获得更快的访问速度。 可以通过均摊复杂度证明,\(n 阅读全文
posted @ 2021-01-04 12:27 maoyiting 阅读(241) 评论(0) 推荐(0) 编辑