摘要: 题解:我们设计状态方程如下: num[i][j]表示从时间i到j中有多少个 pre[i][j]表示时间1~i中,A选了j个时的B能选的数量的最大值. nex[i][j]表示时间i~cnt中,A选了j个时的B能选的数量的最大值. mus[i][j]表示从时间i到j的保证选时,A和B选的数量中的较小值的 阅读全文
posted @ 2017-12-29 14:29 楼主大大 阅读(163) 评论(2) 推荐(0) 编辑
摘要: 题解: 先求出可重复的nex[]和num[].然后再次做kmp时,对于一个位置i一直跳到失配位置j,且(j<<1)<=i,所以此时重叠的num[i]=此时的num[j]+1. 阅读全文
posted @ 2017-12-25 17:01 楼主大大 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 题解:很显然的是要用到kruskal算法,这样就能保证路径上的最大边权最小. 我们可以采取离线的方法,将删边化为加边就好了.先用没有删过的边跑kruskal,这样剩下的边就可以丢掉了.然后从后往前做. 对于操作一:直接询问即可,题目已经保证了两点相连了(想想为什么). 对于操作二:我们对需要加的边( 阅读全文
posted @ 2017-12-24 14:37 楼主大大 阅读(229) 评论(0) 推荐(1) 编辑
摘要: 题解: MCS算法.详细说明请见cdq的论文--弦图和区间图. 阅读全文
posted @ 2017-12-23 10:11 楼主大大 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 题解: 显然如果整张图没有环的话,就是一个无脑dp[u][0/1]. 那么我们只需要考虑环上的一条边(u,v),分强制不选u和强制不选v两种情况,累计答案是取其中的较大值即可. 阅读全文
posted @ 2017-12-23 08:39 楼主大大 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 题解: 我们可以知道每个不同的最小生成树对于一个边权所使用的数量都是相同的. 那么我们就可以先做一次最小生成树,然后对于每一个最小生成树中的边权搜索出所有的可以选取的方案,然后乘法原理累计答案即可. 阅读全文
posted @ 2017-12-21 22:38 楼主大大 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 题解: 我们设dp[a][b][c][d]表示目前已经有a个男生,b个女生,在某一时刻男生最多比女生多c个,在某一时刻女生最多比男生多d个. 所以就可以转移了: (dp[a+1][b][c+1][max(d-1,0)]+=dp[a][b][c][d])%=mod; (dp[a][b+1][max(c 阅读全文
posted @ 2017-12-21 21:48 楼主大大 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 题解: 我们可以单独的用LCT来维护每个点的深度(先把当前根转到根,再查询到根的路径长度就可以了),这棵splay由于只需要旋转最大最小值,手玩发现树的形态基本没变,所以我们就可以手动维护这个splay的形态,记录好根,父亲,儿子的状态然后用LCT求深度即可. 阅读全文
posted @ 2017-12-21 17:47 楼主大大 阅读(230) 评论(0) 推荐(1) 编辑
摘要: 题解: 这个题可以采取离线处理的方式.先处理出每个点i左边第一个比它大的点L[i],和右边第一个比它大的点R[i]. 那么对于区间L[i]到R[i]有p1的贡献.① 对于左端点在L[i]+1到i-1,右端点为R[i]的区间有p2的贡献.② 对于左端点为L[i],右端点为i+1到R[i]-1的区间也有 阅读全文
posted @ 2017-12-21 17:45 楼主大大 阅读(165) 评论(0) 推荐(2) 编辑
摘要: 题解: 我们设dp[i][j][0/1]表示最终序列从i到j最后放的是i/j(0/1). 很显然的转移 if(h[i]<h[i+1]) dp[i][j][0]=dp[i+1][j][0]; if(h[i]<h[j]) (dp[i][j][0]+=dp[i+1][j][1])%=mod; if(h[j 阅读全文
posted @ 2017-12-21 17:43 楼主大大 阅读(97) 评论(0) 推荐(1) 编辑