摘要: link to luguo Update 2022.1.22:将有推导过程的代码部分替换成链接形式 努力建设中的模板 part: Hall 定理 Prufer 序列 二项式反演 树分治 后缀数组-SA 广义后缀自动机-GSAM 后缀自动机-SAM K-D Tree WQS二分 笛卡尔树 kruska 阅读全文
posted @ 2022-03-10 14:30 zuytong 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 一些关于DP的小优化: 前缀和优化(用于 $dp[i]=dp[i-k]+v[i]$的转移) bitset优化(01背包(价值能否取到),常数为 $\omega=1/32$) 单调队列优化(求恒长区间最大/小值) 二进制优化(完全背包问题,$O(n^2\ logn)$ ):P1776 线段树优化:CF 阅读全文
posted @ 2022-03-10 14:12 zuytong 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 蒟蒻对整体二分的初步理解: 这是用来解决一类区间询问的问题 最最经典的就是求区间kth 这是个离线算法,将询问一起处理 过程有点类似CDQ,但并不一样 我们假定当前询问或修改是[L,R](不一定对应原操作序列) 他们的答案值域(或修改值)都在[range_l, range_r] 考虑如何二分成[ra 阅读全文
posted @ 2022-03-10 13:48 zuytong 阅读(19) 评论(0) 推荐(0) 编辑
摘要: SPFA 的优化: (虽然它已经死了,但它还活着) SLF 优化:我们将队列换成双端队列 deque,当要新插入一个元素时,如果这个元素的距离大于队首元素,就正常将它插到队尾,否则插到队首 SLF + swap 优化:在 SLF 的基础上,每次队列发生改变的时候,我们就比较队首和队尾的距离,如果 \ 阅读全文
posted @ 2022-03-10 13:46 zuytong 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 这是一种内含均摊思想的暴力,为什么叫树?可能和 set 的使用有关吧...... 核心思想: 将一段相同权值的区间压缩成一个结点,在 set 中保存 它的用处:对于随机数据,如果含有区间赋值,我们就有机会让结点数大幅度下降,在求值操作时可以快速操作 当然,对于精心构造的数据,珂朵莉树可以说是束手无策 阅读全文
posted @ 2022-03-10 13:42 zuytong 阅读(50) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2022-03-10 13:41 zuytong 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 线性基是用来解决子集异或一类问题的算法 先放个大佬写的详细解析 (我是学着ta的来写的) 先引入一些概念(下面的大写字母都表示一个“无符号整数集”): 张成: (看着像个人名...) 若 \(T\subseteq S\) ,则所有这样的子集 \(T\) 的异或和组成的集合为 \(S\) 的张成,记作 阅读全文
posted @ 2022-03-10 13:35 zuytong 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 问题引入: 给出 \(n\) 行 \(m\) 列的01矩阵,现在要选某些行,求出一种方案使得每一列恰好有一个1 这是一种精确覆盖问题 DLX的原理就是:先选出 "1" 的个数最少的那一列 \(min\_num\),枚举选某一行(在 \(min\_num\) 列上有1)\(x\),然后将 \(x\) 阅读全文
posted @ 2022-03-10 13:32 zuytong 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 引入: 给出质数 $p$ 以及 $b,n$ ,问满足 $b^x \equiv n\ (mod\ p)$ 的最小 $x$ 是多少? 如果说 $p$ 很小,我们就可以直接通过费马小定理枚举 $1$ ~ $p-1$ 可惜,$p<2^{31}$ 那我们就引出今天的主角:BSGS BSGS 用到了分块的思想 阅读全文
posted @ 2022-03-10 13:23 zuytong 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 来补补初二没学透的坑 引入: \(\mu (n)\) 为莫比乌斯函数 定义: \(\mu (1)=1\) 当 \(n=\prod^k_{i=1} p_k\) 时,\(\mu (n) = (-1)^k\) 否则 \(\mu (n) = 0\) 重要性质: \(\sum_{d|n} \mu (d)=[n 阅读全文
posted @ 2022-03-10 13:21 zuytong 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 博弈论的简单总结: 1. 巴什博弈: 一堆石子,共 \(n\) 个,双方可以取 \(1\) ~ \(m\) 个石子,先取完者获胜(无法操作者败) 显然,如果场上只有 \(m+1\) 个石子,那么先手必败 那我们可以思考,如果场上石子有 \(k(m+1)+r\) 个石子,那先手一定可以取 \(r\) 阅读全文
posted @ 2022-03-10 13:19 zuytong 阅读(188) 评论(0) 推荐(0) 编辑
摘要: P4719 【模板】"动态 DP"&动态树分治 什么是动态树分治我也不知道 有史以来第一次认真写个算法 写在前面: 注意代码细节!注意代码细节!注意代码细节! (因为多次很小很小的错误导致查了1~2个小时才看到的蒟蒻枯死) 0. 前置知识: 线段树、树链剖分、(树形DP?) 1. 问题简化: 先考虑 阅读全文
posted @ 2022-03-10 13:12 zuytong 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 前置芝士: 向量: 定义:既有大小,又有方向的量叫做向量(Vector)。 可以表示为 $\overrightarrow{AB}$ 或 $\vec a$ 由于向量平移后不变,所以也可以用 $(x,y)$ 表示向量,即将尾端平移至原点,记录头端的坐标 向量的模:$|\overrightarrow{AB 阅读全文
posted @ 2022-03-10 13:00 zuytong 阅读(432) 评论(0) 推荐(0) 编辑
摘要: tarjan是指一类算法,可用来求LCA,割点/边,强联通分量。 虽然我觉得它只是dfs维护一些特殊信息罢了 1. 求LCA 利用 tarjan 可以在O(n+q)的时间内,通过1次 dfs 离线求出询问的LCA 具体实现过程: 假设 \(LCA(u,v)=k\) 那么显然,\(u\) 和 \(v\ 阅读全文
posted @ 2022-03-10 12:58 zuytong 阅读(53) 评论(0) 推荐(0) 编辑