12 2019 档案

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

点击右上角即可分享
微信分享提示