\begin{cases}f_{i,0}=\sum_{son}\max(f_{son,0},f_{son,1})\\f_{i,1}=\sum_{son}f_{son,0}\end{cases}
$$
-答案就是 $\max(f_{root,0},f_{root,1})$ 。
+答案就是 $\max(f_{root,0},f_{root,1})$ .
#### 带修改操作
\begin{cases}f_{i,0}=g_{i,0}+\max(f_{son_i,0},f_{son_i,1})\\f_{i,1}=g_{i,1}+f_{son_i,0}\end{cases}
$$
-答案是 $\max(f_{root,0},f_{root,1})$ 。
+答案是 $\max(f_{root,0},f_{root,1})$ .
可以构造出矩阵:
#### 具体思路
-1. DFS 预处理求出 $f_{i,0/1}$ 和 $g_{i,0/1}$ 。
+1. DFS 预处理求出 $f_{i,0/1}$ 和 $g_{i,0/1}$ .
2. 对这棵树进行树剖(注意,因为我们对一个点进行询问需要计算从该点到该点所在的重链末尾的区间矩阵乘,所以对于每一个点记录 $End_i$ 表示 $i$ 所在的重链末尾节点编号),每一条重链建立线段树,线段树维护 $g$ 矩阵和 $g$ 矩阵区间乘积。