CF1338
Codeforces Round #633 (Div. 1)
A
最优情况一定是只在必须的位置增加,记录最大增量,取 \(\log_2\) 即为答案。
B
最小值:叶子节点两两间的距离都为偶数时,答案为 \(1\),否则答案为 \(0\),以任意一个叶子节点为根 \(dfs\) 即可判定。
最大值:先将答案设为 \(n-1\),若一个节点有 \(k\ (k>0)\) 个相邻的叶子节点,则答案减去 \(k-1\)。
C
打表找规律,规律和四进制有关。
D
树上相邻的两个点一定不可能产生包含关系,同时发现若 \(x,y\) 有包含关系,\(z\) 也在这个包含关系中,则 \(z\) 到 \(x,y\) 路径的距离一定 \(\leqslant 1\)。画图不难得,若距离 \(>1\),则 \(z\) 是被夹在 \(x,y\) 间的,因此该结论成立。
得任何一个合法情况都是在树上选出一条毛毛虫,在上面求最大独立集。考虑树形 \(DP\),设 \(f_{x,0/1}\),表示以 \(x\) 为端点向下延申的毛毛虫的最大独立集,\(0/1\) 表示 \(x\) 是否被选,设 \(y\) 为 \(x\) 的一个儿子,得转移为:
\[\large\begin{aligned}
f_{x,0}&=\max\left\{ \max\{ f_{y,0},f_{y,1} \}+deg_x-2 \right\} \\
f_{x,1}&=\max\{ f_{y,0}+1 \}
\end{aligned}
\]
这里转移到 \(f_{x,0}\) 时加上 \(deg_x-2\) 的原因是最优情况一定是把 \(x\) 的父亲也选上,所以 \(x\) 相邻的点就只考虑 \(deg_x-2\) 个。
对于不是直上直下的毛毛虫,在 \(lca\) 处合并来更新答案即可。