随笔分类 -  { 树算法 { 树分治 } }

摘要:题目大概说一棵树,各个结点都有一个数字(<=k),然后问有几条路径使得路径上所有结点包含了1到k的所有数字。 阅读全文
posted @ 2016-11-06 20:16 WABoss 阅读(908) 评论(0) 推荐(0) 编辑
摘要:题目大概要先求一张边有权的图的根为1的最短路径树,要满足根到各点路径序列的字典序最小;然后求这棵最短路径树包含k个结点的最长路径的长度和个数。 首先先构造出这棵字典序最小的最短路径树。。好吧,我太傻逼了,不会。。保证邻接表存储邻接点有序的前提下,就能按字典序DFS一遍,在O(N+E)的时间复杂度上构 阅读全文
posted @ 2016-05-10 10:45 WABoss 阅读(716) 评论(0) 推荐(0) 编辑
摘要:题目大概说一棵树,树边有费用和收益两个属性,求一条收益和最大的路径满足费用和不超过C。 树上任意两点的路径都可以看成是过某一个子树根的路径,显然树分治。 治的时候要解决的一个问题是,找到费用小于等于某个数且收益最大的值。 这个很容易想到用线段树,不过不想写线段树。。 想了想,想到可以先排序,从小到大 阅读全文
posted @ 2016-04-28 18:19 WABoss 阅读(334) 评论(0) 推荐(1) 编辑
摘要:题目大概说给一棵有点权的树,输出字典序最小的点对,使这两点间路径上点权的乘积模1000003的结果为k。 树的点分治搞了。因为是点权过根的两条路径的LCA会被重复统计,而注意到1000003是质数,所以这个用乘法逆元搞一下就OK了。还有要注意“治”的各个实现,把时间复杂度“控制”在O(nlogn)。 阅读全文
posted @ 2016-03-27 17:05 WABoss 阅读(334) 评论(0) 推荐(0) 编辑
摘要:题目大概是,给一棵树,统计距离为k的点对数。 不会DP啊。。点分治的思路比较直观,啪啪啪敲完然后AC了。具体来说是这样的: 阅读全文
posted @ 2016-03-21 21:08 WABoss 阅读(642) 评论(0) 推荐(0) 编辑
摘要:题目给一棵树,边带有权值,求每一点到其他点路径上的最大权和。 树上任意两点的路径都可以看成是经过某棵子树根的路径,即路径权=两个点到根路径权的和,于是果断树分治。 对于每次分治的子树,计算其所有结点到根的距离;对于每个结点,找到另一个离根最远的且与该结点路径过根的结点,二者的距离和就是这个点在过这棵 阅读全文
posted @ 2016-03-05 23:07 WABoss 阅读(583) 评论(0) 推荐(0) 编辑
摘要:题目给一棵边带权的树,统计路径长度<=k的点对数。 楼教主男人八题之一,分治算法在树上的应用。 一开始看论文看不懂,以为重心和距离那些是一遍预处理得来的。。感觉上不敢想每棵子树都求一遍重心和距离——那样时间复杂度怎么会只有O(nlogn)? 后来想通了,真的是对于每颗子树都把其所有结点单独提取出来, 阅读全文
posted @ 2016-03-01 09:58 WABoss 阅读(421) 评论(0) 推荐(0) 编辑