codeforces 502 g The Tree

Posted yinwuxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 502 g The Tree相关的知识,希望对你有一定的参考价值。

题解:

一道优秀的题目

有几种做法:

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的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 682C Alyona and the Tree DFS

Codeforces Round #502 D. The Wu(状压预处理)

Codeforces1065F Up and Down the Tree 树形DP

Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) A The Rank

codeforces 842C Ilya And The Tree

codeforce 1059ESplit the Tree