点分治 学习笔记

点分治这东西虽然很早就打过一次板子,但一直理解的不透彻,而且再去看之前写的那个板子居然写的是n^2暴力。。。然后今天又重新学了一遍
点分治的思想和树链剖分很类似,将一颗树尽可能均匀的分开,再合并答案,如果分开的那个点找的好的话复杂度就是nlogn的(不算其中答案统计的复杂的)
而要找的这个点就是重心,很容易就能脑补出,如果一个点是重心,那么以这个点为根的向下走一步的所有子树中节点数的最大值最小,这和树链剖分中找重链的方法很类似;
然后就能愉快的递归 O(n)找重心了;
接下来就是如何利用这个性质统计答案;
一般点分治所要统计的答案都有一个性质,就是可以按照经过的某个定点分类;
大多情况下都是按照是否经过当前重心来分类的;
这样就可以将所有经过当前重心的边统计一下,再递归找子树的重心,递归下去之后就将下一次递归完全限制在那颗子树里了,也就是接下来找的边都不会经过之前那个重心;
关于统计答案,一般有两种常用的姿势;
①略微加点容斥,将当前点向外的所有点对的答案先都加进来,再从儿子那里把经过重复边的那些点对都删去;
②分开寻找每一颗子树,用之后寻找的子树来和之前找的子树之间更新答案;
这两种方法都有其限制,一般根据题目来变通;
题目暂时不贴,太晚了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值