摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32266题目大意:①先求任意两点间的最短路径累加和,其中不连通的边权为L ②删除任意一条边,求全局最短路径和的最大值。解题思路:首先说下多源最短路中,floyd和和优先... 阅读全文
posted @ 2014-10-04 18:51 Physcal 阅读(3035) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23846题目大意:给定一个升序序列,有q次询问,每次询问(L,R)出现最多的值的次数。解题思路:非常麻烦的题目。尽管一眼就能看出来是个RMQ。关键在于如何转化为RMQ。... 阅读全文
posted @ 2014-10-03 18:37 Physcal 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47319题目大意:给定一个序列,要求确定一个子序列,①使得该子序列中所有值都能被其中一个值整除,②且子序列范围尽可能大(r-l尽可能大)。解题思路:对于要求1,不难发... 阅读全文
posted @ 2014-10-03 15:30 Physcal 阅读(926) 评论(4) 推荐(0) 编辑
摘要: 准确来说,动态规划是一种思想,而不是一种算法。算导里将它归结为——高级程序设计技巧。 在线性结构上进行状态转移DP,统称线性DP。 线性DP最常见的有: 子集和问题,LIS问题,LCS问题。 拓展之后有:子段和问题,杂类问题。1. 子集和问题和硬币计数问题子集和问题的一个实例: 〈S,t〉。其中,... 阅读全文
posted @ 2014-10-02 20:35 Physcal 阅读(3280) 评论(0) 推荐(0) 编辑
摘要: 假设手里有N个串,和原文进行匹配,如果跑KMP,得把原文跑N次,实在是太费时间了。AC自动机借助于Trie的压缩功能,将多个串压成一个“树”,用这个树进行KMP,这就是贝尔实验室发明的AC自动机。AC自动机主要有三个操作;insert,getfail,print,find。insert的操作和Tri... 阅读全文
posted @ 2014-10-02 20:32 Physcal 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 字符串匹配广泛用于各类工程、研究。朴素的字符串匹配像极了两条履带,小的履带先和大的履带对齐,逐个验证上下是否一致。如果不一致,小的履带右移一格,继续上下比对。最坏复杂度是O(nm),实在难以让人满意。实际上,小履带没必要每次都从头开始和大履带匹配,假设小履带已经匹配了好多,失配后右移一位从头开始走,... 阅读全文
posted @ 2014-10-02 20:23 Physcal 阅读(229) 评论(0) 推荐(0) 编辑
摘要: string标准库固然强大,但是仍然有一些处理字符串的优秀数据结构。Trie(前缀树)就是其中之一,它通过在树上对不同字符串的相同字符只记录一次,来实现对多个字符串的"压缩":可以认为多个字符串被压成了一个超级大的字符串。int ch[10000][26],cnt[10000];int sz=1; ... 阅读全文
posted @ 2014-10-02 20:01 Physcal 阅读(404) 评论(2) 推荐(0) 编辑
摘要: Treap名字的来源:Tree+Heap,正如名字一样,就是一颗简单的BST,一坨堆的合体。BST的不平衡的根本原因在于基于左s; if(ch[1]!=NULL) s+=ch[1]->s; }}Treap的结点结构Treap的主操作由以下几部分构成:rotate、insert,... 阅读全文
posted @ 2014-10-02 19:40 Physcal 阅读(1422) 评论(0) 推荐(0) 编辑
摘要: 线段树与BST不同,它维护的是区间信息,树高越低,区间范围越大,而最后一层就是单点信息。线段树的价值于其维护的区间信息,如果不能有效利用,那么线段树就是一颗废树。一、单点更新线段树按照结点更新方式的不同,分为单点更新和成段更新。单点更新是线段树最简单的结构。通常由Push_Up, Build,Up... 阅读全文
posted @ 2014-10-02 19:34 Physcal 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 尽管堆优化的Prim用于处理稠密图不错,但是实际上很少有题目稠密图。所以一般直接上用并查集优化的Kruskal,简洁高效。int find(int x) {return x!=p[x]?p[x]=find(p[x]):x;}struct edge{ int u,v,c;}Edge[10001]... 阅读全文
posted @ 2014-10-02 18:54 Physcal 阅读(166) 评论(0) 推荐(0) 编辑