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