2011年10月16日

poj-1226 Substrings ***

摘要: /* * 1226 KMP * * 用的KMP, O(n^3) * 由于数据规模小, 直接暴力枚举最短串的各个子串再依次与其他串KMP应该也能过 (复杂度也是O(n^3)) * * 这里不直接枚举各个子串, 而是枚举子串的起点位置, 依次与其他串KMP, 记录和每个串及其反串的最大匹配长度, * 再以此计算这些值的最小值, 就得到该起点的子串所能达到的最大匹配长度(与刚才的方法其实差不多) * */#include <cstdio>#include <cstring>using namespace std;const int maxN = 100 + 5;const i 阅读全文

posted @ 2011-10-16 23:37 龙豆 阅读(293) 评论(0) 推荐(1)

poj-2752 Seek the Name, Seek the Fame **

摘要: /* * KMP * */#include <cstdio>#include <cstring>using namespace std;const int maxL = 400000 + 10;char str[maxL];int next[maxL], stack[maxL];//计算next数组void preKMP(char *p, int len){ int k, j; //next[0] = -1 是为了标记第一个值.. 也可以把字符数组往后移一位,这样next[1] = 0, 比较正常 next[0] = -1; j = 1, k = -1; ... 阅读全文

posted @ 2011-10-16 17:24 龙豆 阅读(228) 评论(0) 推荐(0)

POJ上的LCA问题小结 [转]

摘要: 1330和1470是入门系列,可以说基本上时用来测试板子的 1986比上面两个稍微多了一个距离,但是本质还是一样的对于一个询问d[u,v]=dis[u]+dis[v]-dis[LCA(u,v)]可以一边LCA一边动态修改当前点到根的距离 3728其实就是记录的东西多了一点(1)孩子到父亲最大价格(2)孩子到父亲最小价格(3)从自己到祖先的最大收益 (4)从祖先到自己的最大收益,这里的分情况讨论只需要手动的画下草图,在使用并查集的同时,做更新操作,维护上面提到的四个变量,对于一个查询,我们用 爬山坡的方式保留最优值,这里画图会显的更为直观 3694说实在的和LCA没有特别大的关系,就是df... 阅读全文

posted @ 2011-10-16 11:52 龙豆 阅读(2238) 评论(0) 推荐(0)

poj-1330 Nearest Common Ancestors **

摘要: /* * poj-1330.cpp * LCA * * LCA入门题 * * 没有用tarjan的离线算法, 用了个在线的, 时间复杂度O(n)-O(sqrt(n)) * * height为树的高度 * 把树按层次分成sqrt(height)个段,每段sqrt(height)层。 * * 对LCA(x, y) * 先把x, y 导入到同一段, 由于最多sqrt(height)段, 所以O(sqrt(height)) * 再在同一段内, 按普通方法找到x, y的LCA, 由于每段sart(height)层, 所以O(sqrt(height)) * 故查询时间为 O(sqrt(height)) = 阅读全文

posted @ 2011-10-16 11:46 龙豆 阅读(448) 评论(0) 推荐(0)

导航