T2_放松一下 题解
以下令 opt=1opt=1opt=1 的事件为“操作 111”,opt=2opt=2opt=2 的事件为“操作 222”。
测试点 1∼21\SIM 21∼2
该特殊性质为得分型。
暴力即可。操作 111 是 O(1)O(1)O(1) 的,操作 222 最坏情况下 O(n)O(n)O(n),总时间复杂度 O(qn)O(qn)O(qn)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
测试点 3∼53\SIM 53∼5
该特殊性质为得分型。
由于没有修改操作,考虑对于每一条边计算贡献即可。
具体的,一条边 u,vu,vu,v 给 uuu 带来了 ava_vav 的贡献,给 vvv 带来了 aua_uau 的贡献,加上这个点本身的贡献即为单次查询答案。
时间复杂度:O(q+n)O(q+n)O(q+n)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
测试点 6∼106\SIM 106∼10
由于该图实际上是一棵树,考虑把贡献拆开变成父亲的贡献加上自己和儿子的贡献。
那需要节点 xxx 的父亲 fxf_xfx ,然后维护 xxx 和 xxx 的直接子节点的总贡献 sxs_xsx 。然后显然 dfsdfsdfs 跑出 fxf_xfx 和 sxs_xsx 。
接着对应到两个操作:
* 操作 111:和点 xxx 有关的是 sfxs_{f_x}sfx 和 sxs_xsx 。总贡献加上了 y−axy-a_xy−ax 。
* 操作 222:向上贡献即为 afxa_{f_x}afx ,向下贡献为 sxs_xsx ,总贡献为 afx+sxa_{f_x}+s_xafx +sx 。
这样就做到了操作 1,21,21,2 都是 O(1)O(1)O(1)
时间复杂度:O(q+n)O(q+n)O(q+n)