这道题展示了分块的强大,学到一手,虽然因为数据太过友好暴力也能过
这道题边数多,直接遍历复杂度很高,大佬们想到了一种分摊复杂度的方法
对于入度大于指定值例如(sqrt),这也是分块常用指定值的点,我们定义为重点
否则为轻点,重点只和重点连,轻点和轻点连。这基于的原理是,重点的个数不超过sqrt个,并且轻点连的边数也不超过sqrt个
对于每个点我们维护val也就是自身加的值,以及sum,周围点的和,对于查询,重点直接输出sum,而轻点进行遍历。
正确的原因是,首先轻点肯定正确,因为是暴力,对于重点来说,所有对于轻点更新的大小,都会通过轻点连向重点的边更新到重点上
同理,重点之间也能相互传递,所以求出sum就是答案。而轻点不能直接输出sum,因为对重点的更新无法传递到轻点,但是因为边数控制住了
所以遍历的复杂度依旧不高。
原文:https://www.cnblogs.com/ctyakwf/p/12559648.html