摘要:
简介 状压dp是一种将一堆 \(0\) 和 \(1\) 压缩成一个二进制的dp,具体如下: \(dp_{0/1,0/1,\dots,0/1}\rightarrow dp_{x}\) 这里的 \(x\) 是一个整数,但我们会把他看作是他的二进制形式。虽然时间复杂度没有变,但写起来更方便。状压dp一般适 阅读全文
摘要:
强连通分量 定义:强连通分量是指一个任意两点都可互相到达的极大子图。 求解思路和桥、割点和边双连通分量很类似。 首先跑出一颗dfs树,令 \(dfn_u\) 表示 \(u\) 的时间戳,\(low_u\) 表示 \(u\) 的子树中仅通过非树边能到达的 \(\min \{dfn_v\}\)。 比如下 阅读全文
摘要:
桥 定义:删除后会增加联通块数量的边被称作桥。 那么,如何求解呢? 方法一 首先跑出一颗dfs树。比如下图(\(2-6,1-5\) 的边是非树边): 可以发现,所有非树边和其构成的环上的所有边不可能是桥,因为删去后仍可以通过环的另一半。比如上图中只有 \(1-2\) 一个桥。那是不是除了这些边以外都 阅读全文
摘要:
简介 哈希是一种能把字符串(实际上数组也行,不过本文都会以字符串为例)映射成一个数的算法,哈希就是把一个字符串转成一个 \(K\) 进制数,但由于得到的数可能会非常大,所以其中会用到取模,因此哈希也有些玄学(建议 CF 有赛后 hack 的比赛不要使用哈希,或提高哈希的安全度)。 普通哈希 可以将 阅读全文
摘要:
简介 字典树是一种用来维护多个字符串的前缀的数据结构,时空复杂度均为 \(O(\sum |S|)\)。 字典树是一颗外向树(边从父亲连向儿子),每条边的边权都为一个字符,一个结点对应的字符串为从根节点到当前结点的边的字符组成的字符串。 比如,当 \(N=5\),\(S_1,S_2,\dots,S_5 阅读全文
摘要:
前置知识 令 \(\operatorname{lowbit}(x)\) 表示 \(x\) 在二进制下最后一个 \(1\) 的位权(例如 \(\operatorname{lowbit}(6)=\operatorname{lowbit}(110_2)=2\)),那我们该怎么计算呢? 注意:\(\oper 阅读全文
摘要:
简介 线段树是一种 \(O(N)\) 建树,\(O(\log N)\) 区间查询区间修改的数据结构。线段树的思想就是把一个区间分成左右两半处理。线段树会将一个区间视作一个点,一个点的左儿子为左半区间,右儿子为右半区间。一般情况下,若一个点编号为 \(i\),则其左右儿子编号分别为 \(2i,2i+1 阅读全文