码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 502 g The Tree

时间:2018-12-15 19:56:18      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:最大   font   别人   方式   线段   codeforce   strong   for   后缀   

题解:

一道优秀的题目

有几种做法:

1.维护后缀和

刚开始我想的是维护前缀和

然后用$sum[x]-sum[y]>=dep[x]-dep[y]$来做

但是这样子树赋值为0这个操作就很难进行了

因为你查找的是链上最小值,所以不改子树上面的节点是做不了的

那我们换一种方式,单点改,查询区间最大后缀和

其实这个东西就是动态dp。。。

$$f(v)=max(f(v)-1,0)+v[v]$$

2.操作分块

分块这个东西有的时候的确简单巧妙。。

但一般我也不会去想分块。。

这个是看了别人题解的。。

我们以每$\sqrt{n}$个元素分一组

对块内的操作,我们等待$\sqrt{n}$都做完了再把这$\sqrt{n}$个操作加入树中

对于当前的询问,我们只需要树内的$\sqrt{n}$个节点的信息就可以了

我们可以建立虚树维护

本来打算学树上分块的。。。但发现这东西并没有啥用

会线段树合并/dsu on tree/树上莫队 应该不会也没啥关系

像这种利用虚树的题目还是比较多的

codeforces 502 g The Tree

标签:最大   font   别人   方式   线段   codeforce   strong   for   后缀   

原文地址:https://www.cnblogs.com/yinwuxiao/p/10124276.html

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