Processing math: 87%

05 2017 档案

摘要:开始给出平面上n个点,m个操作,每次加一个点或者查询一个点的曼哈顿距离最近点的曼哈顿距离。(坐标为整数)。 n,m5×105。 分析 首先KD Tree的做法是错误的,一个经典的例子是给出n个点的圆,询问圆心。 如果这个问题是只统计一个角方向(一个点左下方,右下 阅读全文
posted @ 2017-05-27 12:58 permui 阅读(163) 评论(0) 推荐(0) 编辑
摘要:一颗n个点的树,初始颜色都不同,初始根为1。定义一个点到根的代价为这个点到根路径上不同颜色个数。有m个操作,分三种: 将一个点到根路径上的所有点颜色改为一种新的颜色 询问一个点的子树的所有点到根的代价和 对点x进行操作1后把根换成x n,m105。 分析 那个修改看着是 阅读全文
posted @ 2017-05-27 12:41 permui 阅读(717) 评论(0) 推荐(0) 编辑
摘要:题意 给一个长度为n的字符串s,再给定一个w,问对于所有的i[1,nw+1]s[i..i+w1]有多少个不同字串。n,w105。 分析 统计不同子串个数的问题可以使用后缀树。一个字符串的后缀树的总边长就是这个字符串的不同子串个数。解决这个问题,一个显然 阅读全文
posted @ 2017-05-19 20:24 permui 阅读(374) 评论(0) 推荐(0) 编辑
摘要:Ukkonen算法是一个非常直观的算法,其思想精妙之处在于不断加字符的过程中,用字符串上的一段区间来表示一条边,并且 自动扩展 ,在需要的时候把边分裂。使用这个算法的好处在于它非常好写,代码很短,并且它是 在线的 ,时间复杂度为O(n) ,是后缀树构建算法的佳选。 算法 我们保存当前节点 的位置 阅读全文
posted @ 2017-05-18 22:17 permui 阅读(2837) 评论(0) 推荐(1) 编辑
摘要:一般求最小生成树的时候,最流行的是Kruskal算法,一种基于拟阵证明的贪心,通过给边排序再扫描一次边集,利用并查集优化得到,复杂度为O(ElogE)。另一种用得比较少的是Prim算法,利用优先队列实现做到O(ElogV)。 在翻 "ZYQN" 博客的时候,看见他写的位运算最小生成树中提到了 阅读全文
posted @ 2017-05-16 14:08 permui 阅读(1402) 评论(0) 推荐(0) 编辑
摘要:题意其实就是说有很多个点,求一组边把它们都连接起来,并且最大的那条边最小。很明显这就是一个最小生成树,是一颗保证最长边最短的树。 代码 刚刚学了个Borůvka算法,于是写了两个。 Borůvka Kruskal 阅读全文
posted @ 2017-05-16 14:04 permui 阅读(640) 评论(0) 推荐(0) 编辑
摘要:问题 对于一个图G(V,E),它的匹配M是二元组(u,v)组成的集合,其中u,vV,(u,v)E,并且M中不存在重复的点。 当|M|最大的时候,我们称MG的最大匹配。 当G是一个二分图的时候,它的最大匹配可以用经典的匈牙利算法或网络流算法求解。然 阅读全文
posted @ 2017-05-15 21:19 permui 阅读(12409) 评论(2) 推荐(5) 编辑
摘要:昨天我们学习了ISAP算法,它属于增广路算法的大类。今天学习的算法是预流推进算法中很高效的一类——最高标号预流推进(HLPP)。 预流推进 预流推进是一种很直观的网络流算法。如果给到一个网络流让你手算,一般的想法是从源点开始流,遇到不够的就减掉,一直往前推到汇点。这就是预流推进算法的基本思想。 每个 阅读全文
posted @ 2017-05-15 19:59 permui 阅读(10446) 评论(1) 推荐(4) 编辑
摘要:引入 最大流算法分为两类,一种是增广路算法,一种是预留推进算法。增广路算法包括时间复杂度O(nm2)的EK算法,上界为O(n2m)的Dinic算法,以及一些其他的算法。EK算法直接进行增广,而Dinic则是通过沿着最短路增广优化了复杂度,它的做法是每次进行bfs求出层次图,再dfs沿着层 阅读全文
posted @ 2017-05-14 15:41 permui 阅读(12023) 评论(4) 推荐(6) 编辑
摘要:给出一棵树,每个点有颜色,每种颜色有一个v属性,第i次经过颜色j可以获得wivj的价值。多次修改单点颜色,查询路径的价值。n,m,q105。 分析 可以发现,经过颜色的顺序是没有关系的,只需要知道有多少个颜色就可以了。也就是说,这个问题可以快速转移,修改是单点修改 阅读全文
posted @ 2017-05-07 11:57 permui 阅读(367) 评论(0) 推荐(0) 编辑
摘要:题意 给出两个长度小于等于2000的小写字母串,四个问题: A的最短子串不是B的子串 A的最短子串不是B的子序列 A的最短子序列不是B的子串 A的最短子序列不是B的子序列 分析 虽然求的是不公共,但是这还是一个字符串的匹配问题,只不过是求匹配不到。 对于子串的匹配问题,可以使用后缀自动机。然而对于子 阅读全文
posted @ 2017-05-06 20:16 permui 阅读(549) 评论(0) 推荐(0) 编辑
摘要:环的问题,经典方法倍长串,求出后缀数组,扫一次sa,如果sa[i]小于等于n,那么就输出这个字符串结尾的位置(即s[sa[i]+n 1])。 代码 c++ include include include using namespace std; const int maxn=4e5+10; char 阅读全文
posted @ 2017-05-06 15:12 permui 阅读(157) 评论(0) 推荐(0) 编辑
摘要:一棵树,每条边有边权,点有点权rn次加入一个点,给出它与父亲的连边长度和它的点权,问此时总共有多少对点满足r_i+r_j\ge dist(i,j)n\le 10^5。 分析 树上点对统计可以使用点分治。每次只需要统计新增了多少对满足条件的点。设一对点(u,v)的lca为k 阅读全文
posted @ 2017-05-04 22:19 permui 阅读(376) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示