首页 > 其他 > 详细

HDU4858 项目管理(分块)

时间:2020-03-24 17:50:59      阅读:61      评论:0      收藏:0      [点我收藏+]

这道题展示了分块的强大,学到一手,虽然因为数据太过友好暴力也能过

这道题边数多,直接遍历复杂度很高,大佬们想到了一种分摊复杂度的方法

对于入度大于指定值例如(sqrt),这也是分块常用指定值的点,我们定义为重点

否则为轻点,重点只和重点连,轻点和轻点连。这基于的原理是,重点的个数不超过sqrt个,并且轻点连的边数也不超过sqrt个

对于每个点我们维护val也就是自身加的值,以及sum,周围点的和,对于查询,重点直接输出sum,而轻点进行遍历。

正确的原因是,首先轻点肯定正确,因为是暴力,对于重点来说,所有对于轻点更新的大小,都会通过轻点连向重点的边更新到重点上

同理,重点之间也能相互传递,所以求出sum就是答案。而轻点不能直接输出sum,因为对重点的更新无法传递到轻点,但是因为边数控制住了

所以遍历的复杂度依旧不高。

HDU4858 项目管理(分块)

原文:https://www.cnblogs.com/ctyakwf/p/12559648.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!