摘要:
字典树,就是树形的字母排列,从根节点开始(根节点不代表任何字母),它的每一个子节点都有一个不同的字母,这样,从根节点开始沿任何路径到达一个叶子节点,路过的字母组合就是一个字符串,字典树在字符串的存储和查找上有很大的优越性,下面是用字典树写的两个题。hdu 1251 阅读全文
摘要:
什么是不重叠最长子串呢,就是一个串中至少出现两次,又不重叠的子串中的最长的,比较绕口。 解决这个问题的关键还是利用height 数组。把排序后的后缀分成若干组,其中每组的后缀之间的height 值都不小于k。然后找出各个组的后缀的sa值的最大最小值max,min,如果存在 max-min >= k,那么就存在长度为k的不重叠子串,因为根据LCP定理,每个组中的height值都不小于k,就是... 阅读全文
摘要:
求若干个字符串的最长公共子串,是后缀数组一个简单的运用,为说明简单起见,设要求的字符串个数是两个。 首先我们先来看一个定义,最长公共前驱,就是常见的LCP,定义lcp(u,v)=max{i|u=v} 也就是从头开始比较u和v的对应字符持续相等的最远值,定义LCP(i,j)=lcp(Suffix(SA[i]),Suffix(SA[j])),也就是SA数组中第i个和第j个后缀的最长公共前缀,关于LC... 阅读全文
摘要:
后缀数组相对后缀树来说比较容易构建,应用也比较广泛,和lcp,RMQ问题联合运用在各种竞赛中叶比较热门,究竟什么是后缀数组,怎么构建和应用,是像我这样的初学者遇到的最大的问题。 直观来说,后缀数组是记录一个字符串的后缀的排名的数组,什么是后缀呢,设一个字符串的长度是len(我们约定字符串下标从0开始,所以到len-1结束,比较符合我们日常编程习惯),某一位置i的后缀的就是从i开始到len-1结束... 阅读全文
摘要:
个人认为网络流问题是图论里比较简单的东西! 前几天做了pku 1459,用的比较简单的sap,比较郁闷的是无论如何优化时间老是在1000左右转,后来用dinic,几乎同样的代码,用时差不多是别人的十倍,后来想一下,或许,是stl 的问题。。。 今天验证了一下,不错,就是它的原因,因为sap用广搜来找最短增广路,所以用到了队列,但是队列元素很少,一般的网络流节点个数都是三位数量级的,所以,在一次又... 阅读全文
摘要:
征程开始,前路漫漫啊,我相信,我会站在巅峰!要温习温习前两天学习的东西了,贪多嚼不烂,所以这一周复习,tarjan,三种最短路,特别是贝尔曼,spa,再看看dinic,一些想法要去验证一下,再看看二分匹配,应该一周就过去了吧! ok! 开始,先是tarjan, poj 2186,典型的强连通题,题的实质意思就是一个n个点的单向图,给出路,问图中是否存在所有点都对他可达的点,有的话输出这样的点的个数... 阅读全文
摘要:
不得不说网络流算法是很让人无语的算法,要想高效率竟然要非递归实现深搜,很无奈,到现在还是在低效率中挣扎!最大流算法的证明就不说了,无非就是最大流最小割定理的推导,定理描述如下:对于任意给定的网络D=(V,A,C),从出发点vs到收点vt的最大流的流量必等于分割的最小截集的容量!至于截集,定义为:给定网络D=(V,A,C),若点集V被分割成两个非空集合V1和V2,使得V=V1+V2,V1∩V... 阅读全文