随笔分类 - 题解
摘要:考虑缩点。 发现对于每一个强连通分量的每个点,都满足能到其所在强连通分量的每个点然后走回来。 但是这个点能到其他强连通分量的点走回来吗?并不是的。由于缩点完是有向无环图,所以只有缩点后出度为 000 的强连通分量内的所有点满足题意。 #include <iostream> #include <cst
阅读全文
摘要:考虑 fi,jf_{i,j}fi,j 表示当前 ai<aja_i < a_jai<aj 的概率。 从前往后处理每个操作。 对于 x,yx,yx,y 互换,显然 fx,y=fy,xf_{x,y} = f_{y,x}fx,y=fy,x。那具体等于什么呢,应该是 fx,y+fy,x2\dfrac
阅读全文
摘要:看到回文,考虑回文自动机。然而出现次数貌似不太好做。由于有 O(n)O(n)O(n) 级别的本质不同回文子串,所以每次匹配一次肯定不行。 但是有一个很好的性质!我们发现要求出现次数的字符串一定是回文。不妨对两个串建立回文自动机,用树形 DP 容易求出每个回文子串出现次数。 由于是树,考虑同时 DFS
阅读全文
摘要:SAM 板题。 考虑对于一个点 uuu,其状态对应所有字符串的长度都在 [lenfau+1,lenu][len_{fa_u}+1, len_u][lenfau+1,lenu] 间,且连续。 容易在后缀链接树上 DP 求出子串出现次数。于是我们用线段树做区间取 max\maxmax,单点查询即
阅读全文
摘要:考虑后缀自动机。 显然我们可以求出自动机每个状态对应的子串集合在原串中出现次数,这是经典应用。 我们设其为 fif_ifi,对于 fi≥2f_i \geq 2fi≥2,将 lenilen_ileni 算进对答案的贡献即可。复杂度线性。 #include <iostream> #include
阅读全文
摘要:考虑建出子序列自动机,然后在上面广搜即可。因为是广搜,所以可以保证找出的是最短的符合条件的字符串。注意广搜时要判 vis。复杂度线性。 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #inclu
阅读全文
摘要:考虑到由于字符集只为 000 或 111,可以字符串哈希。容易发现 000 不会对哈希结果造成影响。对于一段排序,肯定是前面一段 000,后面是一段 111。前面的 000 对哈希值的贡献都为 000,只需要管后面的 111 的数量。 所以我们可以预处理 fif_ifi 表示有 iii 个 111
阅读全文
摘要:容易发现只与字符串中每个字符出现次数有关,与字符本身的排列无关。 对于一个字符串 SSS,能在他后面接龙的不同的出现个数的字符串最多 262626 个。又因为后面的字符串长度比 SSS 多 111,所以如果建图是有向无环的。将每个字符出现次数哈希,建图,转化为最长路,DP 即可。 #include
阅读全文
摘要:我们先要保证奖赏尽量多,其次费用尽量小。应该可以看出,是一个最小费用最大流。如何建模? 考虑拆点。 每个岛屿分成一个入点一个出点。对于有雇佣兵的岛屿,源点向这个入点连容量为 111,费用为费用的边。对于怪兽的岛屿,连这个点的入点和出点,容量为 +∞+\infty+∞,费用为打怪兽的价格。对于桥梁,连
阅读全文
摘要:考虑一个动态规划,fif_ifi 表示前 iii 个字符的划分方案。枚举 iii,对于 sss 前 iii 个字符的某个后缀,如果出现在字典里,就转移。形式化地,如果 s[j⋯i]s[j \cdots i]s[j⋯i] 为一个在字典的后缀,那么 fi=∑jfj−1f_i = \sum \limit
阅读全文
摘要:提供一个非常容易的做法。 还是考虑点分治,但不用莫反,也不用容斥。 考虑找出重心后深搜,找到每个点到重心的路径的点权 gcd\gcdgcd。把他们全都扔到 set 里面,直接枚举 set 里面两个数就好。 这看起来很暴力,其实是个经典套路。由于 gcd\gcdgcd 在 O(logv)O(\l
阅读全文
摘要:如果只是求本质不同子串个数,显然的经典后缀自动机。考虑建出自动机后,相当于统计这个有向无环图上从起点开始路径个数。容易通过 DP 做到线性,具体的,令 fuf_ufu 表示以 uuu 开始路径数。则 fu=1+∑(u,j)∈Efjf_u = 1+\sum \limits_{(u,j) \in E}
阅读全文
摘要:看着就像点分治,但会发现和模板有些不同,多了一维。 我们还是照着模板的做法,分治求出重心,然后深搜找出每个点到重心的距离。不过我们这里要求两个,分别是长度 dud_udu 和边权和 pup_upu。 考虑枚举一个点 uuu。如果这个点和另外一个点 vvv 是满足条件的,那么必有 du+dv≤ld
阅读全文
摘要:经典后缀自动机题。 考虑对 sss 建立后缀自动机,然后从前往后枚举 ttt 的每个字符,从后缀自动机起点开始搜,如果现在的点往这个字符有边,直接往这边走,并且长度 +1+1+1。否则一直跳 fafafa,更新长度即可。 复杂度 O(n+m)O(n+m)O(n+m),拿下了 Rank 1。 #inc
阅读全文
摘要:先最大流一次,如果此时流量大于等于 CCC,那我们一定可以通过将一些边的流量减小而到达 CCC。 如果不行,我们考虑枚举每一条流满的边,将容量设置为 +∞+\infty+∞ 后再跑一次。容易发现如果一条边没有满流那么增加容量没有意义。他的流量已经被前面的边限制了。 这样我们每次更改容量,重新跑最大流
阅读全文
摘要:简单 DP。 考虑 fi,0f_{i,0}fi,0 和 fi,1f_{i,1}fi,1 分别表示 iii 点不选和选的情况下以 iii 为根的子树的最小点覆盖。 对于叶子节点 uuu,fu,0=0f_{u,0}=0fu,0=0,fu,1=1f_{u,1}=1fu,1=1。 对于非叶子节点,f
阅读全文
摘要:很套路的一个题。 首先发现,当左端点固定,随着右端点增加,区间 or\operatorname{or}or 和区间 max\maxmax 都是单调不递减的。 但是这个性质还不够强!我们发现,左端点固定,右端点增加时,每一次区间 or\operatorname{or}or 发现改变,二进制至少有
阅读全文
摘要:首先可以发现答案小于等于 n+2n+2n+2.于是可以考虑枚举 xxx,判断 xxx 是否为一个子段的 mex\operatorname{mex}mex。 考虑如果 xxx 为 mex\operatorname{mex}mex 的条件是什么?区间内没有 xxx,但包含 1∼x−11 \sim x
阅读全文
摘要:考虑 DP。 我们令 ai,bi,ci,dia_i,b_i,c_i,d_iai,bi,ci,di 为每名英雄的四个属性,顺序如输入格式所描述。 显然有 fi=maxj∣aj<ai∧dj≤bi∧cj≤difj+1f_i = \max \limits_{j|a_j<a_i \land d_j
阅读全文
摘要:由于 kkk 固定,考虑处理 hih_ihi 为以 iii 开头的后缀的前 kkk 个字符的哈希值。 两个后缀的最长公共前缀 ≥k\geq k≥k 等价于这两个后缀前 kkk 个字符相同,于是可以转化为 hi=hjh_i=h_jhi=hj。 于是变成了经典的类似区间数颜色的问题,使用莫队,块长
阅读全文

浙公网安备 33010602011771号