随笔分类 -  算法竞赛

上一页 1 ··· 3 4 5 6 7 8 下一页
摘要:struct SAM { static const int MAXN = 1e6 + 10; int nxt[2 * MAXN][26]; int len[2 * MAXN]; int lnk[2 * MAXN]; int cnt[2 * MAXN]; int siz; int lst; void 阅读全文
posted @ 2020-12-10 16:58 purinliang 阅读(99) 评论(0) 推荐(0)
摘要:struct BigInt { static const int BASE = 1000000000; static const int DLEN = 9; int len; vector<int> a; BigInt(int v = 0) { len = 0, a.resize(2); do { 阅读全文
posted @ 2020-12-09 02:28 purinliang 阅读(97) 评论(0) 推荐(0)
摘要:强连通缩点: 算法复杂度: Kosaraju算法:初始化,加边,两次dfs,复杂度O(n+m) 强连通分量缩点算法:遍历每个点每条边,复杂度O(n+m) 对边排序去重:复杂度O(n+mlogm) 注意: 1、最好先 Init() ,然后再 AddEdge() 2、维护缩点时点的性质对新点的影响在 d 阅读全文
posted @ 2020-12-06 01:49 purinliang 阅读(93) 评论(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 阅读(324) 评论(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 阅读(75) 评论(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 阅读(241) 评论(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 阅读(87) 评论(0) 推荐(0)
摘要:根据不同的需求要改的太多了,注意如果不需要防hack可以关闭anti_hack,或者在多个字符串共享同一个哈希算法的时候让anti_hack值 哈希值为64位有符号整数 进行2次哈希,输出为long long的版本。 基本上只维护这个版本了,不太想维护其他版本的。 字符串的多项式哈希的公式 \[ha 阅读全文
posted @ 2020-11-30 12:54 purinliang 阅读(600) 评论(0) 推荐(0)
摘要:适用于非负权图,所有的边权都是非负数。 或者从s节点出发的子图中,边权都是非负数的也可以。(从s出发没办法适用的,是负数甚至复数都无所谓。) Dijkstra算法 标准版本,带有vis数组方便检查是否从s出发可以到达i。 下面的版本中是从1开始的n个点。如果是从0开始的话要改一下。 namespac 阅读全文
posted @ 2020-11-28 12:38 purinliang 阅读(156) 评论(0) 推荐(0)
摘要:验证链接:洛谷P5656 | 洛谷P1082 | 洛谷P3811 LCE1这个算法找到的是x的最小非负整数解。剩下的事情交给倍增算法。 注意特判0和负数的情况,下面存在除以0的时候。假如传入的数字有负数,则返回值需要特殊处理。 namespace exGCD { ll exgcd(ll a, ll 阅读全文
posted @ 2020-11-27 02:03 purinliang 阅读(159) 评论(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 阅读(415) 评论(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 阅读(161) 评论(0) 推荐(0)
摘要:新模板,使用了模板和默认值、幺元等,分离node中的数据维护部分。当维护的数据与l,r有关时,节点内需要存l,r,可能导致空间开销比较大。当query的merge的成本太高时,不能用下面这个模板,必须用旧模板。旧模板中query的流程和每个节点中的数据相关,也就是说query是可以理解sum[u]和 阅读全文
posted @ 2020-11-26 22:22 purinliang 阅读(138) 评论(0) 推荐(0)
摘要:并查集 对并查集及其常见的扩展的介绍,以及模板的梳理,部分模板可能没有经过实际验证?要多想一想是不是正确的。 TODO:搭建配套的测试代码和用例,用一个已知正确的暴力代码/验证过的并查集代码对拍出正确的答案,然后保存到git中用脚本进行自动化测试。 Completed in November 202 阅读全文
posted @ 2020-11-26 21:17 purinliang 阅读(324) 评论(0) 推荐(0)
摘要:维护翻转操作 struct Treap { private: static const int MAXN = 200000 + 10; int ls[MAXN], rs[MAXN]; int rnd[MAXN], siz[MAXN]; int del[MAXN], dnt; int cnt, roo 阅读全文
posted @ 2020-11-26 20:15 purinliang 阅读(152) 评论(0) 推荐(0)
摘要:突发奇想可以用拓扑排序的写法,从叶子开始删,然后deg为0的是父亲,deg不为0的是后继节点,最后会剩下一个环deg都是2。 for(int i = 1; i <= n; ++i) { G[i].clear(); deg[i] = 0; cnt[i] = 0; } for(int i = 1; i 阅读全文
posted @ 2020-11-25 04:58 purinliang 阅读(80) 评论(0) 推荐(0)
摘要:https://codeforces.ml/contest/888/problem/G struct TrieNode { int cnt; int num; int nxt[2]; void Init() { cnt = 0; num = 0; memset(nxt, 0, sizeof(nxt) 阅读全文
posted @ 2020-11-20 18:20 purinliang 阅读(85) 评论(0) 推荐(0)
摘要:并查集找格子图的连通分量 int n, m; char g[1005][1005]; int fa[1000005]; int cnt[1000005]; int id[1005][1005]; int x[1000005]; int y[1000005]; int find(int x) { re 阅读全文
posted @ 2020-11-19 17:36 purinliang 阅读(102) 评论(0) 推荐(0)
摘要://#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune 阅读全文
posted @ 2020-11-18 11:24 purinliang 阅读(212) 评论(0) 推荐(0)
摘要:要么使用atan2的long double类型,要么使用整数。 无误差版本的极角排序。 int n; struct Vector { ll x; ll y; int id; Vector() {} Vector(ll _x, ll _y) { x = _x, y = _y; } bool top() 阅读全文
posted @ 2020-11-17 11:00 purinliang 阅读(162) 评论(0) 推荐(0)

上一页 1 ··· 3 4 5 6 7 8 下一页