Loading

CF1917F Construct Tree

首先将 \(l_i\) 排序。

\(l_n + l_{n - 1} > d\),肯定无解。

\(l_n\) 包含在直径中,我们只需要找是否存在 \(d -l_n\) 的组合即可。

\(l_n\) 不包含在直径中,最优的构造方案一定是把所有边堆一个点上,此时需要将直径分为两个部分,形式化的,将 \(l_i\) 分为两不相交子集,两子集交集和为 \(d\),且两子集分别的和均不小于不在直径上的边的权值。

注意到这一步我们设一个二维背包即可,发现只需要求可行性,于是使用 bitset 优化即可。

posted @ 2024-12-31 19:20  Alexande  阅读(11)  评论(0)    收藏  举报