摘要: 强连通缩点: 算法复杂度: Kosaraju算法:初始化,加边,两次dfs,复杂度O(n+m) 强连通分量缩点算法:遍历每个点每条边,复杂度O(n+m) 对边排序去重:复杂度O(n+mlogm) 注意: 1、最好先 Init() ,然后再 AddEdge() 2、维护缩点时点的性质对新点的影响在 d 阅读全文
posted @ 2020-12-06 01:49 purinliang 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 有向图才会有forward edge和cross edge。无向图是没有这两种edge的。 void dfs(int u) { vis[u] = 1; for(int &v : G[u]) { switch(vis[v]) { case 0: // tree edge vis[v] = 1; dfs 阅读全文
posted @ 2020-12-05 23:23 purinliang 阅读(299) 评论(0) 推荐(0) 编辑
摘要: struct ACM { static const int MAXN = 1e6 + 10; int ch[MAXN][26], fail[MAXN]; int cnt; int R[MAXN]; void Init() { ms(ch[0]), fail[0] = 0; cnt = 0; } in 阅读全文
posted @ 2020-12-02 20:26 purinliang 阅读(58) 评论(0) 推荐(0) 编辑
摘要: https://oi-wiki.org/string/kmp/ 研究的对象其实主要是前缀函数,而不是KMP算法,KMP算法只是前缀函数的一个应用,如何求前缀函数,理解前缀函数的作用才是关键。 简单理解然后应用 前缀函数:对字符串s(从1开始)求其前缀函数pi,则pi[i]表示长度为i的s的前缀s[1 阅读全文
posted @ 2020-12-01 13:13 purinliang 阅读(122) 评论(0) 推荐(0) 编辑
摘要: struct PAM { static const int MAXN = 1e6 + 10; char s[MAXN]; int ch[MAXN][26], len[MAXN], fail[MAXN], dep[MAXN]; int cnt, slen, lst; int R[MAXN]; void 阅读全文
posted @ 2020-11-30 17:33 purinliang 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 根据不同的需求要改的太多了,注意如果不需要防hack可以关闭anti_hack,或者在多个字符串共享同一个哈希算法的时候让anti_hack值 哈希值为64位有符号整数 进行2次哈希,输出为long long的版本。 基本上只维护这个版本了,不太想维护其他版本的。 字符串的多项式哈希的公式 \[ha 阅读全文
posted @ 2020-11-30 12:54 purinliang 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 适用于非负权图,所有的边权都是非负数。 或者从s节点出发的子图中,边权都是非负数的也可以。(从s出发没办法适用的,是负数甚至复数都无所谓。) Dijkstra算法 标准版本,带有vis数组方便检查是否从s出发可以到达i。 下面的版本中是从1开始的n个点。如果是从0开始的话要改一下。 namespac 阅读全文
posted @ 2020-11-28 12:38 purinliang 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 验证链接:洛谷P5656 | 洛谷P1082 | 洛谷P3811 LCE1这个算法找到的是x的最小非负整数解。剩下的事情交给倍增算法。 注意特判0和负数的情况,下面存在除以0的时候。假如传入的数字有负数,则返回值需要特殊处理。 namespace exGCD { ll exgcd(ll a, ll 阅读全文
posted @ 2020-11-27 02:03 purinliang 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 中国剩余定理 一元线性同余方程组 $ x\equiv r_1 (\mod m_1)\ x\equiv r_2 (\mod m_2)\ x\equiv r_3 (\mod m_3)\ ...\ x\equiv r_n (\mod m_n)\ $ 其中,对于任意的 \(i\neq j\) , \(gcd 阅读全文
posted @ 2020-11-27 00:35 purinliang 阅读(352) 评论(0) 推荐(0) 编辑
摘要: namespace SegmentTree { #define ls (o << 1) #define rs (o << 1 | 1) ll bse[3] = {13, 1331, 2333}; ll mod[3] = {998244353, 1000000007, 1000000009}; ll 阅读全文
posted @ 2020-11-26 22:34 purinliang 阅读(136) 评论(0) 推荐(0) 编辑