码迷,mamicode.com
首页 > 编程语言 > 详细

【DFS序列】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching

时间:2014-12-12 16:36:36      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   sp   2014   问题   log   bs   工作   

bubuko.com,布布扣

题意:在树中找到一个点i,并且找到这个点子树中的一些点组成一个集合,使得集合中的所有点的c之和不超过M,且Li*集合中元素个数和最大

首先,我们将树处理出dfs序,将子树询问转化成区间询问。

然后我们发现,对于单一节点来说,“使得集合中的所有点的c之和不超过M,且Li*集合中元素个数和最大”可以贪心地搞,即优先选择c较小的点。(<--这正是主席树/权值线段树/权值分块的工作)

但是我们需要枚举所有节点,从他们中选一个最大的。

既然有dfs序了,那么就是无修改的区间询问咯。(<--莫队的工作) 但是莫队转移的过程中,主席树/权值线段树的插入/删除无法承受。(当然主席树根本就用不着莫队,也可以解决这个问题,但这不是这篇文章要介绍的) 权值分块的插入/删除是O(1)的,查询是O(sqrt(n))的,总复杂度仍是O(n*sqrt(n))的。

编程复杂度较低,常数较小。

 

【DFS序列】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching

标签:blog   http   io   sp   2014   问题   log   bs   工作   

原文地址:http://www.cnblogs.com/autsky-jadek/p/4159897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!