2012年6月21日

ACM的第六乐章--后缀数组

摘要: 以下题目属于入门级别hdu 1403 ural 1517 简单后缀数组应用http://acm.hdu.edu.cn/showproblem.php?pid=1403http://acm.timus.ru/problem.aspx?space=1&num=1517http://poj.org/problem?id=2774题意:给两串字符,求最长的公共子串。思路:把两个串合成一个串,之间用‘#’隔开,然后对后缀排序,求出height数组值后,当height[k]为两个串的公共前缀长度时,取最大的。hdu 3518http://acm.hdu.edu.cn/showproblem.php 阅读全文

posted @ 2012-06-21 10:01 aigoruan 阅读(458) 评论(0) 推荐(0)

ACM的第七乐章--Tarjan lca

摘要: tarjan 求解lca主要利用并差集的想法:首先遍历树,从叶子节点开始向上合并成一棵棵的子树,然后子树并子树,就成了一棵树了。查找是在合并的时候进行的,exp:u是s,t的lca,先从u节点进入s,把s并到u下面,然后发现t没有被访问,退到u,再进入t,同样把t并到u下面,发现s被访问过了,那么s的lca也就是s,t的lca了,也就是并差集里的f[s]。当然,f[s]会变的:假设当前f[s] = u; f[u] = u; 当u并到v的时候,也就是f[u]=v; 相应的f[s] = v。这也就是tarjan求解lca的关键方法。poj 1330 tarjan lcahttp://poj.org 阅读全文

posted @ 2012-06-21 09:49 aigoruan 阅读(610) 评论(0) 推荐(0)

ACM的第二乐章--BFS

摘要: bfs和dfs一样,也是以树形搜索形状进行的,只不过dfs是以树根开始一个个的搜索,而bfs则以步数、层次展开搜索,也就是从树根一层层的向外拓展。这种拓展需要的空间一般都是指数级的,所以不能像dfs一样灵活搜索,往往都是在一定的剪枝策略下展开的,因而bfs一般适合求解最优解。标志性的bfs里会有一个队列,队列里的状态是理解bfs过程的关键,一般来说,队列里存储的是等待拓展的状态,这些等待拓展的状态是很难知道先后关系的,但是队列里的层次、步数的状态肯定是从队头到队尾递增的,往往我们求解的就是这些递增的状态。Catch That Cowhttp://poj.org/problem?id=3278重 阅读全文

posted @ 2012-06-21 09:36 aigoruan 阅读(188) 评论(0) 推荐(0)

导航