摘要: 字符串整理(Manachar,KMP,扩展KMP,ACAM,SA,SAM,最小表示法) 基础 字符集$\sum$:一个字符集是一个建立了全序关系的集合,即任意属于$\sum$的元素可以比较,字符集中的元素叫做字符 字符串:一个字符串$S$将n个字符顺次排列组成,$n$为$S$的长度,计作$|S|$, 阅读全文
posted @ 2020-07-25 19:40 行zzz 阅读(232) 评论(0) 推荐(0)
摘要: 计算系数 运用二项式定理,递推组合数即可,也可以用Lucas定理 注意在快速幂中(取模运算有乘法时)要*1LL,防止中途溢出 #include<bits/stdc++.h> #define fi first #define se second #define pb push_back #define 阅读全文
posted @ 2020-07-25 19:33 行zzz 阅读(418) 评论(0) 推荐(0)
摘要: 矩阵取数游戏 容易发现每一行是独立的,分别dp 设$f(i,j,k)$表示当前行,取到第i轮时,前面取了j个数,后面取了k个数,最大得分 #include<bits/stdc++.h> #define fi first #define se second #define pb push_back # 阅读全文
posted @ 2020-07-25 19:17 行zzz 阅读(117) 评论(0) 推荐(0)
摘要: 树网的核 根据直径的性质,我们对任意直径计算是等同的,故只要求出一条直径就行了 然后我们将直径上的点标记,为$u_1,u_2,...,u_t$ 设$d(u_x)$为直径上一点$u_x$不通过直径上的边能到达的最远距离 我们枚举在直径上距离不超过s的区间$(u_i,u_j)$,考虑$ans=max(m 阅读全文
posted @ 2020-07-25 18:54 行zzz 阅读(99) 评论(0) 推荐(0)
摘要: 疫情控制 对于最值问题,在树上首先思考贪心和dp 我们发现,一个军队要移动,一定是往上移动到深度最小的位置,或者是绕过root到一个root的子节点 经过思考,正着做较难,但如果转为二分答案(因为答案有单调性),判定时我们有较好的贪心策略 在实现的时候细节较多,要自己调一下 将军队向上走的时候,用倍 阅读全文
posted @ 2020-07-25 17:53 行zzz 阅读(88) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2020-07-24 17:08 行zzz 阅读(1) 评论(0) 推荐(0)
摘要: 用倍增思想求$sa_[],rk_[] → sa_{2k}[],rk_{2k}[]$ 用基数排序,排序二元组$(rk[i],rk[i+k])$ 复杂度$O(N\log)$ #include<bits/stdc++.h> const int N=1000010; char s[N]; int n,m,n 阅读全文
posted @ 2020-07-23 19:14 行zzz 阅读(136) 评论(0) 推荐(0)
摘要: 有向图连通性tarjan int nc[M],vc[M],hc[N],cc; int s[N],to=1,in[N],c[N]; vector<int> sc[N]; int dx,ct; int df[N],lo[N]; void adc(int x,int y) { nc[++cc]=hc[x] 阅读全文
posted @ 2020-07-16 22:01 行zzz 阅读(83) 评论(0) 推荐(0)
摘要: //割边 int dfn[MAXN], low[MAXN], idx; bool bridge[MAXN]; void tarjan(int now, int f) { dfn[now] = low[now] = ++idx; for (int i = head[now]; i; i = nxt[i 阅读全文
posted @ 2020-07-14 15:15 行zzz 阅读(142) 评论(0) 推荐(0)
摘要: 数据结构刷题记录 AT1219 歴史の研究 - 莫队 简单的回滚莫队,考虑到维护最大值,加操作好做而减操作难 还可以将每个数可能的贡献算出,即对于一个数x,贡献为x1,x2,...,x*y(y为在整个序列中x出现个数),离散化后,用值域分块维护,只用普通莫队即可 下面是回滚莫队做法的代码 #incl 阅读全文
posted @ 2020-07-07 08:43 行zzz 阅读(222) 评论(0) 推荐(0)