上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 25 下一页

动态树之LCT(link-cut tree)讲解

摘要: 动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作。其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT(link-cut tree)。 LCT的大体思想类似于树链剖分中的轻重链剖分(轻重链剖分请移步http://www.cnblogs.com/BLADEVIL/p/3479713.html),轻重链剖分是处理出重链来,由于重链的定义和树链剖分是处理静态树所限,重链不会变化,变化的只是重链上的边或点的权值,由于这个性质,我们用线段树来维护树链剖分中的重链,但是LCT解决的是动态树问题(包含静态树... 阅读全文
posted @ 2014-01-08 17:01 BLADEVIL 阅读(24204) 评论(0) 推荐(9) 编辑

莫队算法讲解

摘要: 莫队算法的大体思路就是暴力的转移,尽量的减少转移的时间。 假设我们求出了区间[l1,r1]的答案,那么对于区间[l1,r1+1]我们可以o(1)的转移,对于不同的询问,我们将l当做横坐标,r当做纵坐标,这样建立的一张图,求最小manhattan生成树,需要转移的时间是最少的。 但是求一颗manhattan最小生成树的时间已经比较长了,所以我们退而求其次。将n个询问分成floor(sqrt(n))个块,对于每个块我们按照r排序,然后每个块之间暴力的转移,经莫涛证明,时间复杂度是O(n^1.5)的。理论上所有的区间询问都可以用这种方法尝试。 经典的应用为bzoj 2038:http://... 阅读全文
posted @ 2014-01-08 16:11 BLADEVIL 阅读(2735) 评论(0) 推荐(1) 编辑

树链剖分之点剖分(点分治)讲解

摘要: 当一个问题可以分解成小问题时,我们一般可以采用分治算法,比如最简单的快速排序,就是分治算法的一个典型的应用。 那么处理树的问题时,假设求解满足条件的点对儿个数,对于一个树来说,两个点对儿的存在只能有两种情况,就是点对之间的路径过根和不过根,那么对于不过根的情况递归做,对于一棵树只考虑过根的情况,计算就行了。 以一个基础题为例子bzoj 2152 http://61.187.179.132/JudgeOnline/problem.php?id=2152 题的大概意思就是给定一棵树,求满足两点路径和为3的倍数的点对儿数量。 现在说下具体的实现,首先3的倍数可以转化为边长和mod3为0... 阅读全文
posted @ 2014-01-08 13:15 BLADEVIL 阅读(649) 评论(0) 推荐(0) 编辑

Blog Explanation

摘要: 有疑问或blog中说明错误的欢迎评论或联系QQ:30056882,邮箱BLADEVIL@outlook.com。本人水平不高,欢迎讨论问题。 blog中所有随笔均为原创,转载请注明来源。 (已退役。) 阅读全文
posted @ 2014-01-08 13:04 BLADEVIL 阅读(417) 评论(3) 推荐(1) 编辑

冬令营

摘要: 今儿得到消息可以去WC了,本来一年前挺想去的,现在也不是那么想去了。。。。还是努力准备吧。。。 阅读全文
posted @ 2014-01-08 12:51 BLADEVIL 阅读(244) 评论(0) 推荐(0) 编辑

bzoj 2152 点剖分

摘要: 比较裸的点剖分,访问到每个重心时,记录一个b数组,代表当前子树中长度为i的边的数量是b[i],因为是3的倍数,所以边长mod 3保存就行了,然后记录一个sum数组,代表当前子树中一个子节点为根的子树中的情况(类似b),然后用这两个数组不断的更新答案就行了。/**************************************************************Problem: 2152User: BLADEVILLanguage: PascalResult: AcceptedTime:572 msMemory:1360 kb************************* 阅读全文
posted @ 2014-01-08 08:28 BLADEVIL 阅读(373) 评论(0) 推荐(0) 编辑

bzoj 3208 暴力

摘要: 对于每个操作,直接暴力做就行了,询问的话搜一遍,然后就这么水过去了。/**************************************************************Problem: 3208User: BLADEVILLanguage: PascalResult: AcceptedTime:17276 msMemory:9032 kb****************************************************************///By BLADEVILvarn, m :longint;map, w :array[0..1000, 阅读全文
posted @ 2014-01-08 06:46 BLADEVIL 阅读(226) 评论(0) 推荐(0) 编辑

bzoj 2064 DP

摘要: 这道题可以抽象成两个数列,将一个数列变换为另一个数列的代价最小首先我们可以处理出所有的状态代表,对于每个状态用二进制来表示,代表的是两个数列中的每一项选还是不选那么答案最多为n1+n2-2,也就是先将第一个数列合成一个数然后再依次拆成第二个数列,那么假设第一个数列选一些,第二个数列选一些,这个子问题合法(就是第一个数列的选出的和与第二个的相等),那么我们就没有必要将这个子问题再与大问题合并,也就是答案减少了2,这样DP就行了/************************************************************** Problem: 2064 Us... 阅读全文
posted @ 2014-01-07 16:15 BLADEVIL 阅读(370) 评论(0) 推荐(0) 编辑

bzoj 2002 LCT

摘要: LCT最基础的题,就用到了一个ACCESS操作首先我们将这个绵羊弹飞的情况看成一颗树,那么假设X点被弹飞到Y点,那么Y为X的父亲节点,弹飞的话父亲节点为n+1(虚设)那么每个询问就是询问X点到根节点n+1的路径长度(节点数)每个修改操作就是将以X为根节点的子树和X的父亲断开,连接到Y上这样简单的维护森林连通性的问题,动态树中的LCT解决就行了/************************************************************** Problem: 2002 User: BLADEVIL Language: Pascal Result... 阅读全文
posted @ 2014-01-07 10:43 BLADEVIL 阅读(340) 评论(0) 推荐(0) 编辑

bzoj 2697 贪心

摘要: 就贪心就行了,首先可以看成n个格子,放物品,那么一个物品假设放3个,放在1,k,n处,那么价值和放在1,n是一样的,所以一个物品只放两个就行了,价值大的应该尽量放在两边,那么排序之后模拟就行了/************************************************************** Problem: 2697 User: BLADEVIL Language: Pascal Result: Accepted Time:0 ms Memory:228 kb************************************... 阅读全文
posted @ 2014-01-07 09:48 BLADEVIL 阅读(168) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 25 下一页