CF 1059E / CF 1039D / CF 1042F / NOIP2018 赛道修建

Codeforces 1059E
题意:现有$n$个点组成一棵以$1$为根的有根树,第$i$个点的点权为$w_i$,需将其分成若干条垂直路径使得每一个点当且仅当被一条垂直路径覆盖,同时,每条垂直路径长度不能超过$L$,点权和不能超过$S$,求最少需要几条垂直路径才能满足要求。特别地,无解输出$-1$。
一条垂直路径是一条不在树中弯曲的路径。
Codeforces 1039D
题意:有一棵$n$个节点的树,其中一个简单路径的集合被称为$k$合法当且仅当:树的每个节点至多属于其中一条路径,且每条路径恰好包含$k$个点对于$k∈[1,n]$,求出k合法路径集合的最多路径数即:设k合法路径集合为$S$,求最大的$|S|$
Codeforces 1042F
题意:无向无根树$n$个点,要将树叶分成集合,使得每个集合中任意两个叶子距离小于等于$k$,问能最少分成几个集合?
NOIP2018 赛道修建
题意:一颗树$n$个点,将树分成$m$条路径,使得 $m$ 条赛道中长度最小的赛道长度最大

这4题都是树上贪心的题,基本上都是树上分路径的问题。

CF1059E 直接记录每个点向上最远到哪 (因为垂直路径),然后就子树DP,记录最长链返回父亲,最后统计条数即可

CF1039D 就直接从下往上能合并就合并,不能合并就传最长链回父亲,这是朴素做法,我们可以发现$k \leq \sqrt{n}$时直接暴力,$k \geq \sqrt{n}$时最多会有$\sqrt{n}$种答案,而且答案单调。二分就行了。

CF1042F 具体看另一博客,主要是记录最长链返回父亲

NOIP2019 就将子树所有最长链存在multiset,然后合并路径,主要是记录最长链返回父亲

所以这类问题就是一般是树上路径划分,一般用记录最长链返回和贪心合并为主。

------ 本文结束 ------