这是为了真正去学一下点分治。。然后看了迪克李的ppt 又是一道写(改)了很久的题。。终于ac了 不算快呢。。具体实现是看的hzwer的blog,然而迪克李的ppt已经将想法讲得很清楚了 uoj文件里有,就懒得贴题解了 刚刚写完的时候,一个极限数据要跑60sec,我也是醉了。。主要原因有: 1.清空数 ...
分类:
其他好文 时间:
2016-03-27 17:38:07
阅读次数:
163
【题意】 问树中长为k的路径中包含边数最少的路径所包含的边数。 【思路】 统计经过根的路径。假设当前枚举到根的第S个子树,若x属于S子树,则有: ans<-dep[x]+min{ dep[y] },y属于前S-1个子树,dis[x]<=K 所以只需要用一个数组t[len]记录前S-1棵子树中长度为l ...
分类:
其他好文 时间:
2016-03-27 11:05:06
阅读次数:
241
树的点分治 首先找树的重心,把根节点设为树的重心。然后进行点分治(就是从根开始,看经过根的方案数,在把根删掉,求每棵子树)。
分类:
其他好文 时间:
2016-03-20 19:43:20
阅读次数:
141
这次写不容斥的版本,WA了好几次,又改成容斥的,还是没过,一怒之下把所有的int改成longlong就过了。。。
分类:
其他好文 时间:
2016-03-16 00:59:07
阅读次数:
219
这里要求输出字典序最小的两个点,就不能像之前那样容斥了,只能直接搞了。 直接搞的话,需要避开n^2,由于这里是等式,显然应该考虑hash映射。从前往后依次枚举计算每棵子树,对于每个子树结点,快速从前面已经计算过的子树中找到答案更新就可以了。 很简单的东西,只是难以用文字解释得清楚。大概一般点分治不用
分类:
其他好文 时间:
2016-03-15 18:39:33
阅读次数:
133
入门题,算是对树分治有了初步的理解吧。 对于点分治,我的理解就是进行logn次暴力,每次暴力的复杂度为n,总复杂度为n*logn。
分类:
其他好文 时间:
2016-03-14 21:42:29
阅读次数:
203
题目给一棵树,边带有权值,求每一点到其他点路径上的最大权和。 树上任意两点的路径都可以看成是经过某棵子树根的路径,于是果断树分治。 对于每次分治的子树,计算其所有结点到根的距离;对于每个结点,找到另一个离根最远的且与该结点路径过根的结点,二者的距离和就是这个点在过这棵子树的根能到的最远距离。 现在问
分类:
其他好文 时间:
2016-03-05 23:48:52
阅读次数:
553
点分治见BZOJ2152 此题只是同时需要把点到根的距离存到数组里, 可以用sort排序然后再统计(arr数组排序后只要arr[l]+arr[r]小于k,则arr[l]与arr中下标[l+1, r]任意一个的和都满足要求,直接统计) #include<algorithm> #include<iost
分类:
其他好文 时间:
2016-02-19 20:44:20
阅读次数:
178
点分治基本思路: ①对每个点, 计算经过它的满足题目要求的链的条数, 所有点的答案加起来刚好不重不漏地统计了整棵树中满足条件的点数 ②计算方法:先算出一颗树上经过了根(根找重心,树比较平衡)的满足条件的链的数量(可以分治), 然后打上标记(每次递归下去时如果遇到标记就停止, 相当于将树从这个位置断开
分类:
其他好文 时间:
2016-02-19 20:39:25
阅读次数:
212