随笔分类 - 知识点
摘要:写起来简单无比,不比 Tarjan 香? 方法 按照[1...n]的顺序在反图(边方向相反)上dfs一遍,出栈时将节点存入数组q[1...n]中 按照q[n...1]的顺序在原图上dfs一遍,每次遍历就是一个新的强联通分量 为什么是正确的? 核心在于封死连通分量往外走的路。 如果原图u-->v有一条
阅读全文
摘要:字符串哈希 [OI-Wiki](字符串哈希 - OI Wiki (oi-wiki.org)) 分为两种哈希方式:以左为高位 和 以右为高位 如果只是快速查询每个字串的哈希值,用以左为高位比较简单,即 \[Hash[l...r]=Hash[1...r]-Hash[1...(l-1)]\times ba
阅读全文
摘要:传送门 解题思路 直接用洛谷题解! 说的好! 怎么求有向图的欧拉路径呢? 如果有起点,从起点出发,然后不断dfs,对每个点记录其出边已经到了哪一条,然后当一个点的出边都遍历完的时候就把这条边加入栈中。 这样就找到了一条合法的欧拉路径。 可以使用当前弧优化,时间优化到O(n+m)。 这个题因为要求字典
阅读全文
摘要:传送门 解题思路 若干平衡树,每次操作有两种,一是合并两个Splay,二是查询某一个点所在的平衡树里的第k小的点的编号。 首先用并查集维护某个点在哪个平衡树里,然后rt[i]记录编号为i的平衡树的根。 每次合并时启发式合并,直接把小的树的每个点暴力insert到大树里。 查询正常操作即可。 为了方便
阅读全文
摘要:传送门 解题思路 Splay如何维护序列呢? 以序列下标作为val值,扔到Splay中。 因为有区间翻转操作,所以实际上并不能保证绝对的按照val值排序,也就是说Splay的中序遍历结果是真正的序列,而val值对应的是当前序列的每个元素原来的位置。 与普通的Splay的区别在于多了一个区间翻转操作,
阅读全文
摘要:传送门 Splay 细节是真他妈多,写了一天,写吐了。 后悔没先学treap了。 需要实现以下函数: void Init():重置整棵树(删除了整棵树的时候用) int New(int val,int fa):新建一个节点,权值为val,父亲为fa,返回节点编号 void Delete(int x)
阅读全文
摘要:任何一个ICG(公平组合游戏)都可以转化成一个有向图移动问题,从而使用SG函数求解。 SG函数的定义为:SG(u)=mex{SG(v)}。 mex表示集合中第一个未出现的数字。 SG函数可以用类似拓扑序的方式,从最终状态一步步向前推。 最后若起点的SG函数值不为0,则先手必胜。 若多张图多个起点?
阅读全文
摘要:点分治 采用分治思想。对树上路径问题进行查询时,把路径分成两部分,一部分是经过根节点的路径,一部分是不经过根节点的路径。 而在处理不经过根节点的路径时,可以才有分治思想,递归到左右子树进行求解。 这样复杂度是 的,但是若我们每次选取的根节点都是要求解的子树的重心,则复杂度可以优
阅读全文
摘要:线性基 推荐Menci博客的前半部分:https://oi.men.ci/linear-basis-notes/ 非常学术的讲解了线性基。 然后对于如何构造线性基,我一般使用以下方法: 对于每一个加进来的数,从高位向低位扫,若某一位是1,则看线性基的a[i]是否有值,若有,则这个数^=a[i],否则
阅读全文
摘要:传送门 基环树 定义: n个节点n条边的连通图。 性质: 很显然有且仅有一个环。 如何找环: dfs,每次读到一个节点入栈(类似Tarjan) 拓扑排序:最后剩下的度数不为零的点一定就在环上 题目通常解法: 把环看做一个整个树的根,然后把子树的信息挂到环的每一个点上,问题变成了环上操作,再根据题目需
阅读全文
摘要:传送门 解题思路 思想:将问题转化为图论问题。 因为一个点只有两个状态,所以每个点可以拆成 i 和 i+n 两个点,u 连向 v 表示选择 u 就必须选择 v。 根据条件建图(注意一定要建对应的反向边(例如建立 u->v+n,就必须再连 v->u+n))后,跑一遍Tarjan求强连通分量。若发现存在
阅读全文
摘要:推荐博客:扶苏的bitset浅谈 笔记: 定义时可以赋值 bitset<10> b(8);bitset<1005> b(string("01010101")) 会分别存储为0000001000、0001010101 函数 b.to_ulong() 和 b.to_ullong() 会把b里面的数转化为
阅读全文
摘要:传送门 解题思路 来pyyz过掉的第一题祭 一开始在前来个模板上改了改,发现T飞了。 看一下题解发现,因为标记不会清空,所以会被卡到O(ST)。 于是考虑优化。 因为AC自动机本质上是一个有向无环图,所以考虑每次更新答案时只更新到当前节点,最后拓扑排序遍历一遍图统计答案即可。 复杂度降到了O(S+T
阅读全文
摘要:传送门(简单版) 传送门(加强版) AC自动机 推荐阅读:洛谷日报 讲的真的很好。 我没法再说的更好了。 甚至我的板子都是照着他的敲的。 加强版 说是加强版,实际上只需更改一下num数组表示的含义:从当前点有几个模式串结尾,改成以当前点结尾的模式串的编号。 在查询过程中也不需要清空num标记。 注意
阅读全文
摘要:传送门 解题思路 哈夫曼树(Huffman Tree),就是一棵树满足叶子节点的权值*到根节点的距离的和最小的树。 一开始假设整个图没有任何连边。 然后贪心思想,每次新建一个节点,取k个权值最小的节点作为这个节点的儿子(相当于把节点合并)。 这样每次少k-1个节点,会导致最后一次合并不满k个节点。
阅读全文
摘要:传送门 Lucas定理 OI-Wiki讲的太好了:http://oi-wiki.com/math/number-theory/lucas/#lucas 做一下总结补充解释: \(f^p(x)\equiv f(x^p) \pmod p
阅读全文
摘要:传送门 什么是分层图 在一个图上,按照某种限制,进行分层,在相邻两层之间按照某种联系进行连边。 如何实现 一般有两种方法:二维数组法和状态压缩法。 二维数组法:a[i][j]表示第i层的节点j。 状态压缩法:a[j*k+i]表示第i层的节点j,其中k表示层数。(相当于把二维坐标压成一维。) 应用 在
阅读全文
摘要:众所周知,spfa已死。 我们能做到的,只是尽可能的优化一点,减少被卡死的情况。 SLF优化 SLF:即 Small Label First,就是每次进队元素跟队首比较,若dis大于队首元素,则将其插到队尾,否则插到队首。 LLL优化 LLL:即 Large Label Last,每次进队元素的di
阅读全文