12 2019 档案

摘要:"模板题" 考虑如果没有$R(x)$的影响就可以多项式求逆。 构造$f'(x)=x^nf(\frac{1}{x})$,可以看出$f'(x)$就是将$f(x)$的系数翻转,即$f'(x)$第$i$项的系数是$f(x)$第$n i$项的系数。 开始推式子: $F(x)=Q(x) G(x)+R(x)$ $ 阅读全文
posted @ 2019-12-31 17:28 nofind 阅读(263) 评论(0) 推荐(0)
摘要:问题: 求多项式$g(x)$,满足$f(x) g(x)\equiv 1\pmod{x^n}$。 Q1:这是什么意思? A1:即$f(x) g(x)$最后只有常数项系数为$1$,其余系数都为$0$。 Q2:为什么要求模$x^n$? A2:这是为了将$n$次方以上的项全都除去,否则$g(x)$会有无穷多 阅读全文
posted @ 2019-12-31 17:22 nofind 阅读(204) 评论(0) 推荐(0)
摘要:"题意" 我用了线段树套平衡树(Splay)去做。 分别说每一问: 第一问:求一个数区间排名: 我们求出区间内 小于这个数 的个数,加$1$即可。 第二问:求区间第K大: 我们显然不能在$\log n$个平衡树上求这个东西,于是我们在外面二分答案$mid$,之后判断其排名与$k$的关系即可。 第三问 阅读全文
posted @ 2019-12-31 00:32 nofind 阅读(137) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-12-30 18:15 nofind 阅读(13) 评论(0) 推荐(0)
摘要:假设我们现在要多项式除法并且取模,$FFT$就会很难受了,因为它用的是复数,并且还有精度差。 这时我们需要一个能替代单位复根的东西:原根。 一、为什么原根能替代单位复根 考虑为什么单位复根能用来做$FFT$,因为它有很多性质,而我们会发现原根也具有这些性质: 以下的$n$都为$2$的正整数次幂。 设 阅读全文
posted @ 2019-12-30 11:13 nofind 阅读(285) 评论(0) 推荐(0)
摘要:一、 多项式的表示法: 1.系数表示法: 一个$n 1$的$n$项多项式$f(x)$可以表示为$\sum\limits_{i=1}^{n 1}a_i x^i$。 于是可以用每一项的系数表示:$f(x)=\{a_0,a_1,...a_{n 1}\}$。 2.点值表示法: 将多项式看成一个函数,那么找$ 阅读全文
posted @ 2019-12-30 11:11 nofind 阅读(283) 评论(0) 推荐(0)
摘要:"题意" ~~真是神题。~~ 题中要求三元环数最多,不妨反着考虑。我们先从$n$个里面选$3$个,有$C_n^3$种方案,之后我们考虑选出的这些方案中最少有几个不能构成三元环。 考虑三个点不会构成三元环的情况,从入度与出度上考虑,必定是一个点入读和出度都为$1$,一个点入度为$2$出度为$0$,一个 阅读全文
posted @ 2019-12-29 16:30 nofind 阅读(157) 评论(0) 推荐(0)
摘要:题意 首先将棋盘黑白染色,要使得棋盘不漏水,当且仅当每个黑点的各个方向的管口都连接上了一个白点的管口。换句话说,我们要让黑点和白点匹配数最大的同时操作次数最小,不难想到最小费用最大流。 对于一条边的描述$(w,c)$表示容量为$w$,费用为$c$。 我们将每个点拆成上下左右四个点,从源点向黑点的所有 阅读全文
posted @ 2019-12-28 15:03 nofind 阅读(242) 评论(0) 推荐(0)
摘要:"题意" 看见配对数最多,想到这是最大流。看到代价,想到这是最大费用流。 于是这题是最大费用最大流。 ~~做完了,撒花!~~ 我们发现这题没有明显的组别之分,也就是说我们并不知道建图时谁连源点谁连汇点。 再次观察题中给出的配对的条件:$a_i$是$a_j$的倍数且满足$\frac{a_i}{a_j} 阅读全文
posted @ 2019-12-27 21:55 nofind 阅读(182) 评论(0) 推荐(0)
摘要:"模板题" 承接 "有源汇有上下界最大流" 说。 这个和有源汇有上下界最大流的思路是相同的,我们只需要求出一个可行流,考虑最多能退回去多少流,于是我们从$ed$向$st$跑一遍最大流,减去即可。 code(只改了最大流代码的一行): 阅读全文
posted @ 2019-12-27 19:34 nofind 阅读(305) 评论(0) 推荐(1)
摘要:"模板题" 设$st,ed$为给出的源汇点,$S,T$是虚拟的源汇点。 首先先转化成无源汇可行流: 从$ed$向$st$连一条容量为$inf$的边,这样无论从$st$向$ed$流多少,都能流回去,保证是循环流。 现在我们求出了一个可行流,这个可行流的流量就是$ed st$的反边的流量。 我们再将$e 阅读全文
posted @ 2019-12-27 19:33 nofind 阅读(312) 评论(0) 推荐(0)
摘要:"模板题" 记第$i$条边的下界为$down_i$,上界为$up_i$。 我们先让每条边流下界的流量,即将每条边$i$的容量设为$up_i down_i$,下界为$0$,现在我们能满足下界的要求了,但是流量是不守恒的。 建虚拟源点$S$和汇点$T$。 我们记每个点$x$的入流量为$in_x$,出流量 阅读全文
posted @ 2019-12-27 19:32 nofind 阅读(817) 评论(0) 推荐(0)
摘要:"题意" 这题主要要处理两个限制: 1.最多有$m$个人,即最多$m$条路径。 2.每个点$i$的经过次数是给定的,为$a_i$。 其中2.可以用限定上下界的方法解决,1.在建图中讲。 建图: 新建三个点:$S'$,$T'$,$S''$,将每个点$i$拆成入点$i$和出点$i'$。 1.从$S''$ 阅读全文
posted @ 2019-12-27 19:30 nofind 阅读(136) 评论(0) 推荐(0)
摘要:"题意" 第一问没什么好说的,就是个最大流。 第二问我们考虑怎么处理费用和增大$K$的限制。 费用: 每条边重新建一遍,带上费用就好了。 增大$K$: 我们可以利用残余网络,新建虚拟源点$S$,从$S$向$1$连容量为$K$费用为$0$的边,这样我们从S再跑一遍最小费用最大流即可。 code: 阅读全文
posted @ 2019-12-27 17:46 nofind 阅读(129) 评论(0) 推荐(0)
摘要:"题意" 获得一条边的价值必须选上两点,这一看就是最大权闭合子图。 先将所有价值选上。 从$S$向每个用户$i$连容量为$C_i$的边,从每个中转站$i$向汇点连容量为$cost_i$的边,对于每个用户$i$从$i$向$A_i$和$C_i$连容量为$inf$的边。 之后跑最小割,用答案减去即可。 c 阅读全文
posted @ 2019-12-27 17:45 nofind 阅读(97) 评论(0) 推荐(0)
摘要:"题意" 这道题的难点主要在于处理一个人可以对区间产生贡献这个限制。 我们之前都是将一个人当成流量,但是这一容量的流量可以对一个区间的点产生贡献,这就导致这个问题无法处理。 于是考虑怎么将一个点可以对一个区间产生贡献在图上表示出来: 我们考虑每一天,从$S$向$1$连容量为$inf$的边,从$i$向 阅读全文
posted @ 2019-12-27 17:43 nofind 阅读(94) 评论(0) 推荐(0)
摘要:"题意" 看见这个式子就知道应该$0 1$分数规划了。 从$S$向每个男生连容量为$1$费用为$0$的边,从没个女生向$T$连容量为$1$费用为$0$的边。 二分答案$mid$。 对于点对$(i,j)$,$i$是男生,$j$是女生,从$i$向$j+n$连容量为$1$费用为$a_{i,j} mid b 阅读全文
posted @ 2019-12-27 11:24 nofind 阅读(126) 评论(0) 推荐(0)
摘要:"题意" 前置知识:最小割树,不会去 "模板" 学学。 会了模板这题就很裸了,直接就最小割树,求有多少种不同的边权即可。 code: 阅读全文
posted @ 2019-12-26 19:39 nofind 阅读(94) 评论(0) 推荐(0)
摘要:"题意" 首先贪心地想必定是中间有一道分割线,上面是全是$0$,下面全是$1$,发现这实际上就是最小割。 我们直接最小割显然会超时,于是平面图转对偶图求最短路。 转对偶图: 所有方向的边的逆时针旋转$90$度,建议自己模拟,这里只给一个西东方向的图。 code: 阅读全文
posted @ 2019-12-26 19:38 nofind 阅读(108) 评论(0) 推荐(0)
摘要:"题意" 下面变量意义:$n:P,m:Q,K:R$。 先考虑没有$D$限制怎么做,我们只需要对$n m$个点的所有$K$个值找最小值的即可。 发现这可以转化成网络流最小割: 1.从$S$向每个$(i,j,1)$连容量为$inf$的边。 2.从$(i,j,k)\ k\in[1,K 1]$向$(i,j, 阅读全文
posted @ 2019-12-26 11:19 nofind 阅读(96) 评论(0) 推荐(0)
摘要:"题意" 首先考虑限制: 1.每个点只能走一次。 2.每条边从编号小的走向边号大的,必定是个$DAG$。 3.我们可以随时用一定花费跳跃到另一个点上。 我们发现最后答案必定是这样的: 跳到一个点,走一段,再跳一段,再走一段,如此往复。 于是我们可以将这个过程理解为选几条路径覆盖所有点的问题。 我们将 阅读全文
posted @ 2019-12-25 21:09 nofind 阅读(115) 评论(0) 推荐(0)
摘要:"题意" 这题是 "P2053 [SCOI2007]修车" 的增强版。 我们直接跳过建图,说优化,建图见我的 "这篇博客" 。 我们发现边数+点数很大,将所有边和点都建出来肯定会超时,因此我们用网络流动态开点的思想解决。 先只建做倒数第一道菜的点,之后我们跑最大流,记下所有满流的厨师点,对于这些点我 阅读全文
posted @ 2019-12-25 18:09 nofind 阅读(98) 评论(0) 推荐(0)
摘要:"题意" 我们假设第$i$个工人修了$j$辆车,所用时间分别为$t_1,t_2....t_j$。 我们算一下他所用时间是多少: $t_1+(t_1+t_2)+(t_1+t_2+t_3)+...+(t_1+t_2+...+t_j)$。 我们用费用提前计算的方法,可以写成: $t_1 j+t_2 (j 阅读全文
posted @ 2019-12-25 08:55 nofind 阅读(152) 评论(0) 推荐(0)
摘要:本篇篇幅过长,可能会出不少错,我已经查过一遍了,如果还有错恳请提出,我马上修改。 "题意" 这题有两种做法: 根据套路,先将所有愉悦值加上,之后减去最小代价。 1. 首先套路地,从源点$s$向每个点连选文科的价值,从每个点向汇点$t$连选理科的价值,割那条表示不选哪科,这样可以保证每个人不选文就选理 阅读全文
posted @ 2019-12-25 00:23 nofind 阅读(207) 评论(0) 推荐(0)
摘要:"题意" 说一下我对朱刘算法的理解: 首先我们考虑树形图的性质:每个点除了根节以外都含有一条入边。 因此我们可以有一个贪心的想法:对每个点(除了根节点)找到一条最短的入边,但是这样会出现环,如下图: 我们会找到$2 3 4$这个环。 根据贪心的思想,我们最终的答案必定含有这个环去掉一条边,于是我们将 阅读全文
posted @ 2019-12-24 16:11 nofind 阅读(190) 评论(0) 推荐(0)
摘要:"题意" 待修莫队与树上莫队合并起来的练手题。 code: 阅读全文
posted @ 2019-12-24 11:58 nofind 阅读(152) 评论(0) 推荐(0)
摘要:"题意" 这题加深了我对最小割的理解 先跑最大流,求出残留网络,对残留网络进行求SCC 源点和汇点显然不在同一个SCC中,不然就有增广路了 考虑每一条边$(u,v)$ 要成为最小割的边首先要满流(参见最大流最小割定理的推论) 1.如果u和源点在一个scc中,v和汇点在一个SCC中那么这条边是必须边 阅读全文
posted @ 2019-12-24 09:26 nofind 阅读(125) 评论(0) 推荐(0)
摘要:"题意" 带修莫队与普通莫队的区别在于加入了一个时间轴,具体可以看 "这篇博客" 。 另外,这是卡常神题。 code: 阅读全文
posted @ 2019-12-24 08:55 nofind 阅读(130) 评论(0) 推荐(0)
摘要:"题意" 首先因为每个值只会被算一次且值的个数为$n^2$级别的,因此我们可以对每个$d_{i,j}$开一个点,之后就可以用最大权闭合子图做。 考虑题目的限制: 1.选择一个区间$[l,r]$会将$\sum\limits_{i=l}^{r}\sum\limits_{j=i+1}^rd_{i,j}$选 阅读全文
posted @ 2019-12-23 21:11 nofind 阅读(160) 评论(0) 推荐(0)
摘要:"题意" 今天发生了一个叫nofind的蒟蒻因为while写成if调了一下午的故事。 首先考虑这两个限制: 1.$S[sl...sr]$这个子串。 2.在$T[ql..qr]$这些字符串中。 我们先对所有的$T_i$建出一个广义后缀自动机,不会广义后缀自动机的出门左转 "这道题" 。 先考虑第二个限 阅读全文
posted @ 2019-12-23 19:13 nofind 阅读(321) 评论(0) 推荐(0)
摘要:"题意" 我们将所有姓名串和点名串拼在一起,中间用原串中不会出现的数隔开,对每个点记录它是哪个串的。 先考虑第一问: 考虑如果点名串$s1$是某个姓名串$s2$的子串,则$s1$必定和$s2$的一个后缀$s2'$的$lcp$为$s1$的长度,即:$lcp(s1,s2')=len(s1)$。 对于一个 阅读全文
posted @ 2019-12-23 15:47 nofind 阅读(235) 评论(0) 推荐(0)
摘要:"题意" 这题正解还是有点难想的。 显然满足条件的字符串就是两个$AA$样子的串一前一后。 设$a_i$表示以$i$为开头的$AA$串长度,$a_i$表示以$i$为结尾的$AA$串长度,那么答案显然为: $\sum\limits_{i=1}^{n 1}a_{i+1} b_i$ 于是考虑怎么求这个,我 阅读全文
posted @ 2019-12-23 10:29 nofind 阅读(230) 评论(0) 推荐(0)
摘要:"题意" 如果对一个数操作$k$次,那么这个数会变成$c^{c^{...^{a_i}}}$,其中$c$有$k$个。 根据 "P4139 上帝与集合的正确用法" 这道题,我们可以知道一个数不断变为自己的欧拉函数,大约$log$次就会变成1,而任何数模$1$都是$0$,于是我们可以用势能线段树解决。 因 阅读全文
posted @ 2019-12-21 22:00 nofind 阅读(317) 评论(0) 推荐(0)
摘要:"题意" 由于这是个$DAG$,我们考虑拓朴排序,求某个点能到的和能到它的点,这是两个问题,我们可以正反两边拓朴排序,这样就只用考虑它能到的点了 设$f[x]$表示$x$能到的点数$+$能到$x$的点数 如果在拓朴排序的过程中: $q.size()==1$,显然当前队首$x$能到达剩下的所有点,中途 阅读全文
posted @ 2019-12-21 18:29 nofind 阅读(154) 评论(0) 推荐(0)
摘要:"题意" 这题上来很容易想去求最小的拓扑序,即将队列换成堆的做法。 然而题目要求小的数 尽量 靠前,我们就拿样例的第三个说: 字典序最小:$14352$ 正解:$15243$ 因为正解中$2$比字典序最小拓扑序的更靠前($3 using namespace std; const int maxn=1 阅读全文
posted @ 2019-12-21 18:10 nofind 阅读(107) 评论(0) 推荐(0)
摘要:"题意" 显然矩乘,不过需要$O(1)$快速幂。 预处理$[0,t]$($t=\sqrt{p}$)次幂的所有矩阵,之后预处理$[t^1,t^t]$的所有矩阵,这样对于一个$k$,我们要的矩阵就是: $a^{k\%p} a^{k/p}$ code: 阅读全文
posted @ 2019-12-21 17:13 nofind 阅读(95) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-12-21 15:06 nofind 阅读(21) 评论(0) 推荐(0)
摘要:"题意" 考虑分治(这是套路,想不到只能说做题少~~别打我~~)。 对于当前区间$[ql,qr]$: 我们先判断区间长度是否为$1$,为$1$只需要特判当前这个数是不是$1$就可以了。 否则我们找到区间最大值位置$mid$,这个可以用$ST$表。之后我们统计过$mid$的所有$[l,r]$,之后递归 阅读全文
posted @ 2019-12-20 21:51 nofind 阅读(201) 评论(0) 推荐(0)
摘要:"题意" 显然先把$S$塞进$SAM$中,之后处理每个询问。 对于一个询问,我们自然不能枚举所有的循环串,于是我们考虑在匹配的过程中删去首字符,加入尾字符。 先匹配好,求一波答案。之后开始删一个首字符,加一个尾字符,之后再统计,直到所有串统计完。 维护当前在哪个节点$now$和匹配的长度$len$。 阅读全文
posted @ 2019-12-20 20:03 nofind 阅读(135) 评论(0) 推荐(0)
摘要:"题意" 默认$n\leqslant m$。 一波莫反后可得: $\sum\limits_{T=1}^{n}\frac{n}{T}\frac{m}{T}\sum\limits_{d|T}d^k\mu(\frac{T}{d})$ 前面显然是可以除法分块的,后面是个积性函数,可以线性筛。 设$f(x)= 阅读全文
posted @ 2019-12-20 19:50 nofind 阅读(144) 评论(0) 推荐(0)
摘要:这个算法主要靠画图理解,于是学习的时候画了不少图,正好写篇博客。 扩展KMP能解决的问题: 给定两个串$S,T$,对于S的每一个后缀$S[i...n]$求和$T$的$LCP$。 设$exnxt_i$表示后缀$S[i...n]$求和$T$的$LCP$,我们要做的就是求所有$exnxt_i$。 我们先对 阅读全文
posted @ 2019-12-20 17:36 nofind 阅读(137) 评论(0) 推荐(0)
摘要:"题意" 晚上不想做题了,随便刷水题,结果看见了这题。 第一眼:这不是搜索吗。。。水题。 敲完:额,我怎么T成90了。 于是看了题解。 根据约数和定理,我们肯定要搜索所有小于$\sqrt{S}$的质因数的指数,对于大于$\sqrt{S}$的要特判。~~于是就T了。~~ 题解中的做法是这样的: 还是搜 阅读全文
posted @ 2019-12-20 00:08 nofind 阅读(146) 评论(0) 推荐(0)
摘要:"题意" 真是道回文自动机好题。 首先考虑答案必定是一个回文串+剩余部分的形式,因此可以建出回文自动机,之后考虑每个长度为偶数的回文串。 对于一个长度为偶数的回文串,设它在回文自动机上对应的节点为$x$,我们对于每个$x$求出$trans_x$表示x的最长后缀回文串,满足$len_{trans_x} 阅读全文
posted @ 2019-12-19 20:30 nofind 阅读(327) 评论(0) 推荐(0)
摘要:题意: "做法来自" 首先竞赛图缩点后是一条链,$1$号节点在开头的那个$SCC$中,因此从$1$号节点出发的最长链即为$1$号节点所在的$SCC$的大小$+1$号节点拓扑序之后的所有$SCC$的大小之和。 设$f_i$表示$i$个点的竞赛图数量,显然有$f_i=2^{\frac{n (n 1)}{ 阅读全文
posted @ 2019-12-19 18:51 nofind 阅读(170) 评论(0) 推荐(0)
摘要:"题意" 考虑对每个节点$x$维护$lastpos_x$表示$x$的所有后缀回文串中第一个$len\leqslant len_x/2$并且能和$x$最后一个字符匹配的,之后枚举节点,判断该点回文串是否合法。 求$lastpos_x$: 如果新建节点$x$满足$len_x\leqslant 2$,那么 阅读全文
posted @ 2019-12-19 18:50 nofind 阅读(201) 评论(0) 推荐(0)
摘要:"题意" 这个DP状态有点神。 首先考虑一个最暴力的状态:$f_{i,j,k,u}$表示第一个选了$i$个,第二个选了$j$个,第一个结尾为$k$,第二个结尾为$u$是否可行。 现在考虑消减状态: 1.首先知道了处理到第几个,那么只要知道一个长度就能推出另一个。 因此状态可以改为$f_{i,j,k, 阅读全文
posted @ 2019-12-19 17:16 nofind 阅读(197) 评论(0) 推荐(0)
摘要:题意: 这题显然直接tarjan是做不了的。 这里安利另一个求SCC的算法Kosaraju,学习的话可以见 "这篇博客" 于是结合莫队,我们有了个暴力。 发现主要瓶颈是dfs过程中找最小的未经过的点,我们用bitset优化一下就过了。 注意有重边,不能直接在biset中删除,要开个邻接矩阵判一下。 阅读全文
posted @ 2019-12-19 15:28 nofind 阅读(201) 评论(0) 推荐(0)
摘要:"题意" 回滚莫队见 "这篇博客" 需要注意一个细节,写在代码注释里了。 code: 阅读全文
posted @ 2019-12-19 10:40 nofind 阅读(168) 评论(0) 推荐(0)
摘要:"题意" 关于回滚莫队见 "这篇博客" 。 code: 阅读全文
posted @ 2019-12-19 08:59 nofind 阅读(121) 评论(0) 推荐(0)
摘要:"题意" 这题很难想到用莫队去做,因为第一印象是这个没办法O(1)移动指针。 考虑从$[l,r]$移动到$[l,r+1]$ (从$[l,r]$移动到$[l 1,r]$同理)。 我们用ST表$O(1)$找到$[l,r+1]$的最小值的位置$mid$,考虑新加入的r+1会产生哪些贡献:显然是很多以$r+ 阅读全文
posted @ 2019-12-19 07:42 nofind 阅读(130) 评论(0) 推荐(0)
摘要:"题意" 显然这个$L$是可以二分的,我们只需要判断$L$是否合法即可。 显然有一个$O(n^2)$的DP: 设$f_i$表示当前匹配到$i$的最大匹配长度。 $f_i=max(f_j+i (j+1)+1)\ j\in[i match_i,i L]$ 其中的$match_i$表示前缀$i$能和文本库 阅读全文
posted @ 2019-12-18 21:36 nofind 阅读(105) 评论(0) 推荐(0)
摘要:"题意" 关于回文自动机的讲解见 "这里" 由于回文串个数是$O(n)$的,直接回文自动机上统计并比较即可。 code: 阅读全文
posted @ 2019-12-18 21:33 nofind 阅读(99) 评论(0) 推荐(0)
摘要:"题意" 不妨先考虑$l=1,r=|S|$的情况: 这时我们要求的其实是$S,T$的本质不同的公共子串数量。 首先对$S$建一个后缀自动机,同时对于每个$T$,我们也建一个自动机。 根据后缀自动机的性质,后缀自动机的所有节点的代表的字符串的集合代表了$T$的全部子串,因此我们可以考虑$T$后缀自动机 阅读全文
posted @ 2019-12-18 20:16 nofind 阅读(111) 评论(0) 推荐(0)
摘要:"题意" 学习了广义后缀自动机。 广义后缀自动机与普通后缀自动机的区别在于它是对多个串建的,于是可以处理多个串。 广义后缀自动机和普通后缀自动机的区别在于两个特判,可以见 "这篇题解" 对于这题,因为叶子数量小于20,以每个叶子为根跑dfs,将跑到的字符串插入SAM即可,求不同子串个数是SAM的常规 阅读全文
posted @ 2019-12-18 15:43 nofind 阅读(150) 评论(0) 推荐(0)
摘要:"题意" 显然加上一个数相等就是差分数组相等,于是问题变为求几个串的最长公共子串。 这里我学习了如何用SA求LCS。 首先问题要转化成求一些后缀的最长公共前缀,要求这些后缀分属不同的串。 于是二分答案,于是问题就变成求一段连续的$height$数组,它们都$\geqslant mid$,并且至少分属 阅读全文
posted @ 2019-12-17 21:31 nofind 阅读(117) 评论(0) 推荐(0)
摘要:"题意" 考虑二分答案$mid$,现在我们要判断$s[c...c+mid 1]$是否在$s[a...b]$出现过。 首先找到$s[c...c+mid 1]$所在的状态: 建出$parent\ tree$,从$s[1...c+mid 1]$的节点(这个可以记录)用倍增向上跳到最后一个$len\geqs 阅读全文
posted @ 2019-12-17 19:54 nofind 阅读(181) 评论(0) 推荐(0)
摘要:"题意" 显然是贪心。 先建出SAM,之后能走相同的字符就走相同的字符,实在不行再走一个比它大的。 考虑怎么处理$[l,r]$的限制,我们只要用线段树合并维护出每个点的endpos集合,到时候判断下走这一步是否合法即可。 code: 阅读全文
posted @ 2019-12-17 19:50 nofind 阅读(164) 评论(0) 推荐(0)
摘要:"题意" 考虑第一问所求即为该串对应的节点的子树内终止节点的个数,而插入一个字符相当于在新增节点到根节点的链+1,于是用LCT维护。 code: 阅读全文
posted @ 2019-12-17 16:44 nofind 阅读(98) 评论(0) 推荐(0)
摘要:"题意" 因为一个$k$相似必定为$k 1,k 2....0$相似,对于一个$lcp$为$k$后缀对$(i,j)$,我们只用把它的贡献加在$k$的答案上,最后求一个后缀和和后缀max就可以得到答案。 考虑如何快速计算后缀对的贡献: 因为后缀对$(i,j),i j$的$lcp$是$min_{k=i+1 阅读全文
posted @ 2019-12-17 14:29 nofind 阅读(147) 评论(0) 推荐(0)
摘要:"题意" 承接 "上篇题解" 考虑两个后缀的$lcp$是什么,是将串反着插入后缀自动机后两个前缀(终止节点)的$lca$!!!于是可以在parent tree上DP了。 比后缀数组又简单又好写跑的还快。 code: 阅读全文
posted @ 2019-12-17 14:27 nofind 阅读(117) 评论(0) 推荐(0)
摘要:"题意" 考虑将$s1$和$s2$接在一起求出相同子串个数,再求出$s1$自己匹配的相同子串个数和$s2$自己匹配的相同子串个数减去即可。 如何求相同子串个数: 我们知道子串的集合即所有后缀的前缀集合,于是实际上答案就是: $\sum\limits_{i=1}^n\sum\limits_{j=i+1 阅读全文
posted @ 2019-12-17 10:15 nofind 阅读(105) 评论(0) 推荐(0)
摘要:"题意" 考虑式子前面那段其实是$(n 1) \frac{n (n+1)}{2}$,因为每个后缀出现了$n 1$次,后缀总长为$\frac{n (n+1)}{2}$。 现在考虑后面怎么求: $\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^nlcp(sa_i,sa_ 阅读全文
posted @ 2019-12-17 08:57 nofind 阅读(114) 评论(0) 推荐(0)
摘要:"题意" 显然如果有一个子串出现过$k$次,那么它必定是一个至少长为k的后缀序的$LCP$,求出所有相邻的长为$k 1$的$height$数组的最小值,在其中取最大值即可 code: 阅读全文
posted @ 2019-12-16 21:42 nofind 阅读(76) 评论(0) 推荐(0)
摘要:关于SAM的介绍和构建见这几篇博客,这里主要是SAM的应用以及题目: "OI wiki" "洛谷日报" 应用: 1.求一个串出现次数 "模板题" 利用parent tree的性质,将每个叶子(其实就是所有前缀)的size设为1,一个点内所有串的出现次数即为子树内size大小(即叶子个数)。 正确性: 阅读全文
posted @ 2019-12-16 09:47 nofind 阅读(159) 评论(0) 推荐(0)
摘要:"题意" 第一问有一个经典做法: "学习笔记" 对于第二问,其实就是对于一个状态的所有串,第一问看成一个,第二问看成多个。 code: 阅读全文
posted @ 2019-12-16 09:46 nofind 阅读(115) 评论(0) 推荐(0)
摘要:"题意" 所谓线段树分裂其实是本题的在线做法。 考虑如果我们有一个已经排好序的区间的权值线段树,那么就可以通过线段树上二分的方法得到第$k$个数是谁。 于是用set维护每个升序/降序区间的左右端点以及对应的线段树根节点,区间排序就将区间拆出来,并将对应的线段树也拆出来。 拆线段树就是将前k个值建一棵 阅读全文
posted @ 2019-12-13 15:31 nofind 阅读(324) 评论(0) 推荐(0)
摘要:"题意" 这题的思路实在巧妙。 首先我们肯定无法对区间进行sort,那么考虑如何使得sort简化。 问:如果给的序列是一个0 1序列,让你区间排序,那么怎么做? 答:建一颗线段树维护sum,求出当前区间中1的数目(query)cnt,之后(以升序排序为例)[l,cnt]都赋值为1,[cnt+1,r] 阅读全文
posted @ 2019-12-13 15:29 nofind 阅读(161) 评论(0) 推荐(0)
摘要:"题意" 考虑点分治,每次处理过重心的询问(即两点在重心的不同子树中)。 求出每个点到重心的线性基,之后对过重心的询问合并两点线性基求解。 code: 阅读全文
posted @ 2019-12-12 21:18 nofind 阅读(177) 评论(0) 推荐(1)
摘要:"题意" 线性基套上树上倍增即可,注意边界。 code: 阅读全文
posted @ 2019-12-12 19:24 nofind 阅读(159) 评论(0) 推荐(0)
摘要:"题意" 前置题目: "P4151 [WC2011]最大XOR和路径" 线段树分治维护边集,用可撤销的并查集维护生成树和每个点到根的异或和,线性基查最小值。 code: 阅读全文
posted @ 2019-12-12 18:20 nofind 阅读(208) 评论(0) 推荐(0)
摘要:"题意" 神仙哈希做法。 随便找个生成树,给每个非树边赋一个值,树边的值为所有覆盖它的边的值得异或和。 删去边集使得图不联通当且即当边集存在一个子集异或和为0,可以用线性基。 ~~证明的话好像画个图挺显然的~~ upd: 找到了一份 "详细的证明" code: 阅读全文
posted @ 2019-12-11 21:14 nofind 阅读(188) 评论(0) 推荐(0)
摘要:"题意" 这题有点神啊。 首先考虑注意这句话: 也就是说如果出现下面的情况: 我们可以通过异或上这个环的权值而不异或上$w$,于是这启示我们答案必定是 一条链带上好几个环 。 现在考虑选哪条$1$到$n$链: 其实任意选一条即可,见下图: 假设我们选了红的那条,而答案是选蓝色的那条,那么显然可以通过 阅读全文
posted @ 2019-12-11 20:01 nofind 阅读(154) 评论(0) 推荐(0)
摘要:"题意" 虽然没用线段树,但是仍然是线段树分治的思想。 考虑分治询问序列,假设当前在$[l,r]$,我们将$[1,l 1]$和$[r+1,Q]$的与$[l,r]$内不重复的边都连上了。 先将$[mid+1,r]$中与$[l,mid]$不重复的边都连上,之后递归$[l,mid]$,再将之前的操作撤销, 阅读全文
posted @ 2019-12-11 19:09 nofind 阅读(179) 评论(0) 推荐(0)
摘要:"题意" 一个图是二分图当且仅当不存在长度为奇数的环。 先假设边只会出现不会消失: 对于新出现的边$(u,v)$,假如$u,v$原来不联通,那么连上也不会出现环,现在考虑$u,v$联通: 假如$u,v$之间的长度为偶数,那么必定出现奇环,否则直接无视这条边,因为假设之后有一条边能和这条边(长为1,是 阅读全文
posted @ 2019-12-11 18:10 nofind 阅读(140) 评论(0) 推荐(0)
摘要:"题意" 显然商店编号的限制能用可持久化trie解决。 特殊的商品预先判掉就好了,现在只考虑普通的商品。 发现商品的时间是单点,询问时一段时间,于是将询问区间在线段树上拆成$log$个区间,分别放上该询问。 之后dfs整颗线段树,先计算当前节点上的询问,之后将商品按照出现时间是在中点左右分成两类递归 阅读全文
posted @ 2019-12-11 16:22 nofind 阅读(174) 评论(0) 推荐(0)
摘要:"题意" 考虑一个操作会对一段时间内的询问产生影响,于是将线段树上的这段时间打上乘这个数的标记,最后dfs整颗线段树。 code: 阅读全文
posted @ 2019-12-11 10:58 nofind 阅读(196) 评论(0) 推荐(0)
摘要:upd 2019.12.10 latex和markdown化 "题意" 解析: 先考虑暴力:将每个区间求出来,放进一个堆里,取出前k个就是答案。 期望得分:20,原因:TLE code(对,我真写了): 阅读全文
posted @ 2019-12-10 11:43 nofind 阅读(165) 评论(0) 推荐(0)
摘要:"题意" 类似 "超级钢琴" ,找最优解用可持久化trie。 code: 阅读全文
posted @ 2019-12-10 11:38 nofind 阅读(83) 评论(0) 推荐(0)
摘要:"题意" 先分块,预处理$f_{i,j}$表示从第$i$块的开头到第$j$个数的答案,之后就是分块的套路了。 注意$l,r$加的时候会爆int。 code: 阅读全文
posted @ 2019-12-10 10:51 nofind 阅读(104) 评论(0) 推荐(0)
摘要:"题意" 显然有这个DP: 设$f_x$表示封住$x$的子树的最小代价。 显然有: $f_x=\min(\sum\limits_{y\in son_x}f_y,a_x)$ 现在考虑用动态DP: 设$g_x$表示$x$除去的重儿子的$f_x$。 有: $f_x=\min(g_x+f_{heavyson 阅读全文
posted @ 2019-12-09 21:17 nofind 阅读(142) 评论(0) 推荐(0)
摘要:"题意" 我理解的动态DP: 发现DP可以写成矩阵的形式,因此用数据结构维护矩阵乘积。 对于这道题,显然有DP: $f_{x,0/1}$表示$x$的子树中,x选/不选的最大点独立集。 $f_{x,0}=\sum\limits_{y\in son_x}\max(f_{y,0},f_{y,1}),f_{ 阅读全文
posted @ 2019-12-06 14:21 nofind 阅读(128) 评论(0) 推荐(0)
摘要:"题意" 显然树剖套李超树。 考虑怎么算函数值: 设$(x,y)$的$lca$为$z$,我们插一条斜率为$k$,截距为$b$的线段。 $(x,z)$上的点$u$: $f(u)=k (dis[x] dis[u])+b= k dis[u]+(k dis[x]+b)$ 所以对这条路径插入斜率为$ k$,截 阅读全文
posted @ 2019-12-05 20:58 nofind 阅读(123) 评论(0) 推荐(0)
摘要:"题意" 李超树裸题,注意一开始截距是$S P$。 code: 阅读全文
posted @ 2019-12-05 07:12 nofind 阅读(120) 评论(0) 推荐(0)
摘要:"题意" 李超树板子题。 对每个区间维护该区间中点$mid$的最优线段。 插入一个线段: 求出这个线段的斜率和截距,注意特判无斜率的情况,得到$y=kx+b$。 之后开始在线段树上插入,假设当前节点$p$区间为$[l,r]$包含在插入区间内,那么比较插入的线段$id$与当前维护的线段$pos$,分类 阅读全文
posted @ 2019-12-04 21:02 nofind 阅读(208) 评论(0) 推荐(0)
摘要:"题意" 大力猜结论。 首先将所有$a_i$变为$a_i i$,之后求不严格递增的$b_i$,显然答案不变,最后$b_i$加上$i$即可。 考虑两种特殊情况: 1.$a[]$是递增的:所有$b_i=a_i$。 2.$a[]$是递减的:显然取$a[]$的中位数$x$,所有$b_i=x$。 现在考虑$a 阅读全文
posted @ 2019-12-04 19:51 nofind 阅读(115) 评论(0) 推荐(0)
摘要:"题意" 暴力自然是模拟,考虑优化下模拟的过程。 我们对每个点开个左偏树,初始为在该点的骑士,之后dfs过程当中从儿子向父亲合并,同时弹出小于当前点的骑士,增加当前点的答。对于每个骑士的答案,我们记录他的起始点和终点即可。 code: 阅读全文
posted @ 2019-12-04 18:47 nofind 阅读(110) 评论(0) 推荐(0)
摘要:"题意" 考虑整体二分。 考虑路径$(x,y)$被路径$(u,v)$包含需要满足什么条件: 设$dfn_x$表示$x$的$dfs$序,$low_x=dfn_x+size_x 1$,即子树最后一个的$dfs$序。 我们钦定$dfn_x using namespace std; define re re 阅读全文
posted @ 2019-12-04 13:53 nofind 阅读(146) 评论(0) 推荐(0)
摘要:"题意" 建出最短路图(DAG)之后就跟这题 "一样" 了。 code: 阅读全文
posted @ 2019-12-03 21:29 nofind 阅读(204) 评论(0) 推荐(0)
摘要:"题意" 这题思路好奇怪啊 见到有向无环图显然是要拓朴排序,不妨按照被吃向吃连边,那么$x$灭绝当且仅当x的入点都灭绝,于是考虑怎样x的入点都灭绝 比如4号节点,它灭绝当且仅当2和3灭绝,2和3灭绝当且仅当1灭绝,我们发现1是2和3的lca 于是得出这样一个做法:将每个点$x$和灭绝后能灭绝$x$的 阅读全文
posted @ 2019-12-03 16:01 nofind 阅读(112) 评论(0) 推荐(0)
摘要:"题意" 建出虚树DP。 设$f[i]$表示i的子树的第一问答案,$minn[i]$表示$i$的子树中到$i$最近的关键点,$maxx[i]$表示$i$的子树中到i距离最远的关键点,$size[i]$表示$i$子树中的关键点个数。 $f[x]=\sum\limits_{y\in\ son_x}f[y 阅读全文
posted @ 2019-12-03 15:45 nofind 阅读(96) 评论(0) 推荐(0)
摘要:"题意" 看见数据范围就知道是虚树,于是先建出虚树。 考虑先求出虚树上的点的管理点,显然两边dfs,一遍从下往上,一遍从上往下。 之后考虑不在虚树上的点,对于虚树上的每一条边$(u,v)$,我们考虑上面未出现在虚树上的点的个数是多少,显然是$u$包含$v$的儿子$x$的子树的大小减去$v$子树的大小 阅读全文
posted @ 2019-12-03 12:43 nofind 阅读(109) 评论(0) 推荐(0)
摘要:"题意" 首先先把虚树建出来。 设$f[i]$表示将$i$的子树割断的最小代价,$minn[i]$表示从$1$到$i$的路径上最小的边,那么有: $f[x]=minn[x]$ 如果x不是资源点: $f[x]=min(f[x],\sum\limits_{y\in\ somn_x}f[y]$ code: 阅读全文
posted @ 2019-12-02 20:25 nofind 阅读(105) 评论(0) 推荐(0)
摘要:"题意" 显然是虚树。 建出虚树后就可以跑DP了。 设$f[x]$表示$x$的子树内需要选几个点。 如果一个点$x$的子树中有选中点(注意不是关键点,因为关键点中有lca)就标记为1。 之后对当前点分类讨论: 1.当前点是选中点:显然儿子中子树内有选中点的都要删去 2.当前点不是选中点:如果儿子中子 阅读全文
posted @ 2019-12-02 11:34 nofind 阅读(135) 评论(0) 推荐(0)
摘要:"题意" 求:$\sum\limits_{i=1}^n\sum\limits_{j=1}^n\max(i,j) f(ij)$,$f(ij)$表示$ij$的约数和。 先把$max$去掉: $2 \sum\limits_{i=1}^{n}\sum\limits_{j=1}^ii f(ij) \sum\l 阅读全文
posted @ 2019-12-02 10:13 nofind 阅读(153) 评论(0) 推荐(0)