随笔分类 -  倍增

摘要:暴力dp非常显然,设f[i][0/1]表示i号点不选/选时i子树内的答案,则f[i][0]=Σf[son][1],f[i][1]=a[i]+Σmin(f[son][0],f[son][1])。 注意到B的部分分,可以想到每次修改只会对修改点到根的路径上的点的dp值产生影响。 考虑如何优化修改路径这一 阅读全文
posted @ 2018-11-26 23:20 Gloid 阅读(517) 评论(0) 推荐(0) 编辑
摘要:倍增floyd求出经过<=2k条边时两点间最短路,一个点到自身的最短路就是包含该点的最小环。然后倍增找答案即可。注意初始时到自身的最短路设为0,这样求出的最短路就是经过<=2k条边的而不是恰好2k条边的了。 阅读全文
posted @ 2018-11-16 23:53 Gloid 阅读(220) 评论(0) 推荐(0) 编辑
摘要:链上问题是一个经典的贪心。于是考虑破环成链,将链倍长。求出每个线段右边能作为后继的最远线段,然后倍增即可。 阅读全文
posted @ 2018-10-29 23:45 Gloid 阅读(172) 评论(0) 推荐(0) 编辑
摘要:由于本质不同的回文子串数量是O(n)的,考虑在对于每个回文子串在第一次找到它时对其暴力统计。可以发现manacher时若右端点移动则找到了一个新回文串。注意这样会漏掉串长为1的情况,特判一下。 现在问题变为统计一个子串的出现次数。可以用SA,二分乱搞一下即可。这里使用SAM。以parent树上表示该 阅读全文
posted @ 2018-08-24 20:06 Gloid 阅读(223) 评论(0) 推荐(0) 编辑
摘要:一个显然的暴力是用并查集记录哪些位之间是相等的。但是这样需要连nm条边,而实际上至多只有n条边是有用的,冗余过多。 于是考虑优化。使用类似st表的东西,f[i][j]表示i~i+2^j-1与f[i][j]~f[i][j]+2^j-1连接起来了,也就是把这一大段看成一个点所建立的并查集。那么每个限制只 阅读全文
posted @ 2018-08-03 13:27 Gloid 阅读(149) 评论(0) 推荐(0) 编辑

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