12 2016 档案

摘要:2 SAT 2 SAT指的是这样一类问题:给出$n$个布尔变量和$m$个限制,形如:$$x_i为真/假 或 x_j为真/假$$ 求满足所有条件的一组布尔值。 我们可以把它转化为一个图上的关系,设结点$2x_i$表示$x_i$为假,$2x_i+1$表示$x_i$为真 以关系$x_i 为真 或 x_j 阅读全文
posted @ 2016-12-27 20:01 Krew 阅读(113) 评论(0) 推荐(0)
摘要:题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3611 分析: 看到m总和的限制不难想到虚树,我们先把虚树建出来,然后问题就是考虑如何DP了。 对于最长链和最短链我们都可以通过枚举它们的LCA来计算,考虑总和,总共有$C(n,2)$条边, 阅读全文
posted @ 2016-12-26 20:54 Krew 阅读(100) 评论(0) 推荐(0)
摘要:虚树 有这样一类问题:给出一棵$n$个结点的树($n$为$10^5$级别),每次指定$m$个结点,给予它们一些性质,求出某个答案,保证$\sum m$与$n$同阶。 从保证总和这一点就可以看出,每次询问的复杂度必须基于$m$,这样才能保证总复杂度。但是这类问题往往需要通过树形DP来解决,这样复杂度就 阅读全文
posted @ 2016-12-26 20:45 Krew 阅读(536) 评论(0) 推荐(0)
摘要:题目大意: 给出$m$个仅由A,C,T,G组成的字符串和$n$,求长度为$n$的所有仅由A,C,G,T组成的字符串且不包含任意一个给出字符串的个数,$m\leq10,n\leq2000000000$ 解析: 首先发现字符串很少,我们可以对此构造出AC自动机,则问题转变为了在这个自动机上能匹配多少长度 阅读全文
posted @ 2016-12-13 21:29 Krew 阅读(68) 评论(0) 推荐(0)
摘要:AC自动机 当匹配问题中的模板变为多个时,KMP算法就显得力不从心了,这时我们就需要一个AC自动机来进行匹配,原理上就是先构造一棵Trie,连出失配边,然后在Trie上进行匹配 代码: 阅读全文
posted @ 2016-12-12 22:53 Krew 阅读(104) 评论(0) 推荐(0)
摘要:题目链接: https://vjudge.net/problem/UVA 10829 题目大意: 给出一个长度为$n$的字符串和$m$,求有多少个子串满足ABA的形式,且$|B|\geq m$,$n\leq 50000$ 解析: 我们可以枚举A的长度,然后通过设 关键点 将整个字符串每$|A|$个字 阅读全文
posted @ 2016-12-06 22:17 Krew 阅读(138) 评论(0) 推荐(0)
摘要:KMP算法 鉴于关于KMP算法的讲义实在太多了(没错就是我懒得写),所以这里并没有关于KMP的具体讲解 代码: KMP树: 没错,当你把所有结点连向它的fail所指的结点,你就得到了一棵KMP树 这个有一个好,它结点是单调的,如果你顺着一个结点往上遍历,你就可以得到以这个结点为右端点的所有能与前缀m 阅读全文
posted @ 2016-12-05 22:22 Krew 阅读(109) 评论(0) 推荐(0)
摘要:题目大意: 给出一个长度为$n$的字符串和整数$m$,求这个字符串有多少个子串满足ABA的形式,其中$len(a) \geq m,len(b)\geq1$ 解析: 我们枚举子串的左端点,每次求出当前串的Fail数组,构造出KMP树,则对于每个右结点,我们要求的就是它的祖先结点中大于等于m的最小值,这 阅读全文
posted @ 2016-12-05 18:30 Krew 阅读(114) 评论(0) 推荐(0)
摘要:Manacher算法 判断最长回文串是一个经典的问题,我们可以利用后缀数组在$O(nlogn)$时间内解决这个问题,但是Manacher算法却可以做到线性时间,而且易于编写的多。 详细说明: http://blog.csdn.net/ggggiqnypgjg/article/details/6645 阅读全文
posted @ 2016-12-02 19:06 Krew 阅读(110) 评论(0) 推荐(0)