
树的分治
cjk_cjk
这个作者很懒,什么都没留下…
展开
-
BZOJ1036 [ZJOI2008]树的统计Count(树链剖分)
这篇blog算是对链剖的笔记吧先放下题:一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和。注意:从点u到点v的路径上的节点包括u原创 2015-02-06 02:22:42 · 556 阅读 · 0 评论 -
BZOJ2152 聪聪可可(点分治)
【题解】基础的点分治题还是分为路径是否经过root来讨论,计算点到根的距离时,一边计算,一边统计距离对3取模等于0,1,2的点的个数 注意:统计答案时(a,a)算1次,(a,b)算2次 【代码】#include#includeint v[40005]={0},w[40005]={0},first[20005]={0},next[40005]={0};int原创 2015-02-18 01:23:58 · 645 阅读 · 0 评论 -
BZOJ3626 [LNOI2014]LCA(树链剖分)
【题解】首先考虑任意两点u,v的LCA的deep:若将0到u路径上所有点标记,则deep[LCA(u,v)]等于从v上溯到的第一个被标记点的deep,而再往上的话一直到根,经过的点都是被标记点 由前缀和的思想,将0到u路径上所有点权值设为1,其他点权值为0,那么deep[LCA(u,v)]等于SUM(0到v路径上的点权和)再进一步想,deep[LCA(u1,v)]+deep原创 2015-02-17 22:44:52 · 616 阅读 · 0 评论 -
BZOJ1758 [Wc2010]重建计划(二分答案+点分治+单调队列)
【题解】利用平均数的一个性质:若每个元素都减去x,平均数也减小x,因此可以二分答案Ave,求所有边权值减去Ave后,有无含L~U条边,权值和非负的路径 -> 树的含L~U条边的最长路权值和是否>=0点分治即可。优化:1.先求root,再二分,可以避免多次求root2.先只求经过root的路径的最优Ave,并把它作为 递归求不经过root的路径 时的二分下界 判断原创 2015-02-20 18:47:15 · 779 阅读 · 0 评论 -
poj1741 Tree(点分治)
比较基础的题【题解】无根树转有根树,对于根结点:树上任意两点的路径有两种情况,即 经过根结点和不经过根结点1. 要求经过根结点的,求出所有点到根的距离d[x],将所有d[i]+d[j] 但实际上,若(i,j)是来自同一棵子树的,它们的路径不经过根,不该被计数,把这样的点对数减去即可2. 要求不经过根节点的,递归根的子结点,执行情况1即可这个根节点不能随便给原创 2015-02-13 22:13:59 · 491 阅读 · 0 评论 -
BZOJ3631 [JLOI2014]松鼠的新家(树链剖分)
直接进行树链剖分 每一轮,路径上的点加1最后输出答案时,除起点外的结点权值要减1只用到区间增减,单点查询和值,因此并不需要线段树来维护 另一种思路:类似前缀和的思想 从起点x到终点y,只需给x,y两个结点加1,给LCA(x,y),fa[LCA(x,y)]减1,最后做一次从底到根的递推即可求出每个点在多少条链上 树剖:#include#include#in原创 2015-05-20 02:04:42 · 1349 阅读 · 0 评论 -
[Usaco2009 Jan]安全路经Travel(最短路树+并查集/树链剖分)
一道数据结构与图论的综合的好题,有着两种解法,可以在这里提交:http://218.28.19.228/cogs/problem/problem.php?pid=279【题解】由于1到其他点的最短路唯一,所以以1为起点的最短路恰好构成一棵树(最短路树,树边i满足:d[v[i]]==d[u[i]]+w[i])那么,一条不经过最短路径最后一条边的次短路,必然包含一条边(u,v)不在原创 2015-02-07 01:03:40 · 713 阅读 · 0 评论