树上路径统计——点分治の板子

《我TM才不想学点分系列》

话说某一天ATP和它的小伙伴们学了一个叫做dsu on the tree的东西。。然后发现这个玩意儿好方便啊还跑得很快。。。好像不但可以统计子树节点还可以统计树上路径啊。。然后ATP开心地想我是不是可以不用学点分了。。

然而几个小时以后ATP它们发现用这个东西做树上路径问题非常恶心。。再几个小时之后ATP它们又发现一个用dsu on the tree写起来恶心到爆的路径统计题。。然后。。。。。。

zyf2000(毫无波动):我写点分。

ATP(黑人问号):???

没错点分治这种东西如果用来做树上路径统计问题的话,每次只需要考虑某一棵单独的子树,进一步地说,可能只需要考虑某一棵单独的子树中经过根节点的路径情况。所以处理起来有其他算法难以替代的方便之处。。

有一篇讲树分治的论文:2009年 漆子超《分治算法在树的路径问题中的应用》

(UPD-半小时后)zyf2000:我TM现在波动很大啊我好像写错了= =
(UPD-一小时后)zyf2000:MD我T了。
(UPD-五分钟后)zyf2000:MD我不用map了我改成二分。
(UPD-五分钟后)zyf2000:我TM点分写错了原来map也是可以过的。。

把树切成一块一块的吧

点分治的基本过程是对于当前处理的一棵树,从中选择一个点,这个点能够把这棵树分成尽量平均的好多棵更小的子树。然后就相当于有了很多更小的子问题,就可以分治下去求解。

点分治保证时间复杂度的关键就是选择的点能够把这棵树分得尽量平均,也就是分完了以后规模最大的那棵子树是所有划分方案中最小的。这样的话设原来的树规模为size,分完了以后规模最大的子树不会超过size/2。也就是说每次分治下去的子问题规模至少是砍去一半的。那么也就是说这样递归分治的层数不会超过log层,而因为每层处理的子树互不相交,每层总的复杂度是

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值