点分治
bandiaoz_cjl
这个作者很懒,什么都没留下…
展开
-
洛谷 P2634 [国家集训队]聪聪可可 (点分治,树形dp)
洛谷 P2634 [国家集训队]聪聪可可题意给一棵 nnn 个节点的树,边带权。任选两点(可相同),求两点之间简单路径长度恰好是 333 的倍数的概率。解法树上路径询问?立即推:点分治!枚举每个点作为lca ,维护子树的点到 lca 距离模 333 的数量,然后先遍历子树先更新答案再更新数量即可。复杂度为 O(nlogn)O(nlogn)O(nlogn)。当然这题也可以直接树形dp,码量一下子就小了很多,原理也是类似的。复杂度为 O(kn)O(kn)O(kn)。kkk 为模数,本题 k=3k=原创 2020-12-03 20:12:52 · 94 阅读 · 0 评论 -
AcWing 264. 权值 (点分治)
AcWing 264. 权值题意给一棵 nnn 个节点的树,边带权。求一条简单路径,使得这条路径上边的权值之和为 kkk ,且包含边的数量最少。解法树上路径询问?立即推:点分治!枚举每个点作为lca ,维护所有子树到这个点的距离的最小深度,遍历每一棵子树,先更新答案,再更新最小深度,遍历完所有子树之后dfs清空最小深度为 infinfinf;注意距离有可能很大,但是需要存储小于等于 kkk 的最小深度即可;minn[0]=0minn[0]=0minn[0]=0 表示路径的其中一个端点就是lc原创 2020-12-03 16:11:50 · 135 阅读 · 0 评论 -
AcWing252. 树(点分治+容斥/树状数组)
AcWing252. 树题意给定一棵 nnn 个节点的树,每条边有边权,求出树上两点距离小于等于 kkk 的点对数量。(本题与洛谷 P4178 Tree 非常相似,但是这题 kkk 比较大,且存在零边,当然也可以和洛谷那题一样用树状数组+特判零边来完成,这里主要讲一下容斥的方法。)解法考虑以 uuu 作为路径的lca, uuu 连接了若干子树,遍历每一棵子树,计算出深度。将所有的深度排序(包括根),然后用双指针来计算有多少对距离之和小于等于 kkk 。这样计算的包含一些不合法的路径,可以发现当两原创 2020-12-03 14:49:27 · 85 阅读 · 0 评论 -
洛谷 P4178 Tree 点分治模板题
洛谷 P4178 Tree题意给定一棵 nnn 个节点的树,每条边有边权,求出树上两点距离小于等于 kkk 的点对数量。解法点分治模板题。考虑以 uuu 作为路径的lca, uuu 连接了若干子树,遍历每一棵子树,计算出深度,并询问前面子树有多少个点深度小于等于 k−d[i]k-d[i]k−d[i] ,用树状数组维护单点修改区间查询即可。询问结束后把这个子树的答案累加进树状数组。遍历完所有子树后清空答案,注意不能用memset 清空,要在树上遍历来清空,否则复杂度是不对的。每次枚举的lca 都原创 2020-12-02 22:13:51 · 189 阅读 · 0 评论