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) 的一个儿子,得转移为:
[largeegin{aligned}
f_{x,0}&=maxleft{ max{ f_{y,0},f_{y,1} }+deg_x-2
ight} \
f_{x,1}&=max{ f_{y,0}+1 }
end{aligned}
]
这里转移到 (f_{x,0}) 时加上 (deg_x-2) 的原因是最优情况一定是把 (x) 的父亲也选上,所以 (x) 相邻的点就只考虑 (deg_x-2) 个。
对于不是直上直下的毛毛虫,在 (lca) 处合并来更新答案即可。