[CF1806E]Tree Master
尝试 10min 思考无果。
Description
给定一棵 \(n\) 个节点的树,第 \(i\) 个节点的父亲是 \(p_i\),点权为 \(a_i\)。根节点为 \(1\),定义 \(p_1=0\)。定义:
\[f(x,y)=\begin{cases}
f(p_x,p_y)+a_xa_y &x\neq0\land y\neq 0\\
0 &\text{Otherwise}
\end{cases}
\]
给出 \(q\) 组询问,每组询问给出 \(s,t\),求 \(f(s,t)\)。\(s,t\) 到根节点的距离相等。
Solution
直接进行记忆化搜索。约定:第 \(d\) 层是到根距离为 \(d\) 的节点集合。每一次递归都会减少一层。分析时间复杂度:
- 
对于节点数 \(< \sqrt{n}\) 的层:对于每个节点数为 \(x\) 的层,树中不会有超过 \(\dfrac{n}{x}\) 个这样的层,这一层经过记忆化共有 \(x^2\) 个节点,所以节点数为 \(x\) 的层总复杂度为 \(\mathcal O(nx)\),\(x\le\sqrt{n}\),所以复杂度对于所有层来说就只有 \(\mathcal O(n\sqrt{n})\)。
 - 
对于节点数 \(\ge \sqrt{n}\) 的层:这样的层不超过 \(\sqrt{n}\) 个,共 \(q\) 次询问,时间复杂度为 \(\mathcal O(q \sqrt n)\),对于这样的层,我们无需记忆化,也可以保证复杂度。
 
对于节点数 \(\le \sqrt{n}\) 的层适合使用记忆化,建议直接用数组存储,空间复杂度为 \(\mathcal O(n\sqrt{n})\)。时间复杂度为 \(\mathcal O((n+q)\sqrt{n})\)。
算不算根号分治?

                
            
        
浙公网安备 33010602011771号