一看到“比值”最大(性价比最高)就知道跟分数规划有关系了。(这里讲过分数规划)
然后看到 要选一个候选人 必须选他的前置,画画图就知道是一棵树。
所以这道题是二分比值,每个点的权值就是战斗力-费用*比值,然后判断在树上能否得到权值和$geq 0$的方案。
那怎么判断?
这篇的T1讲过,典型的树上背包,像那道T1一样在树上暴力转移即可。其实这题的父子依赖性质跟那道T1差不多,因为连通块就是一片父子的依赖关系(当然最上边的根节点的祖先是还没处理到的)。
那树上每个点都要遍历一下它的所有儿子,对于每个儿子还要枚举以这个儿子为根的子树中选出的点的数量。
二分的时间复杂度是$O(log(ans))$,转移的时间复杂度$O(n^2)$。总时间复杂度是$O(n^2*log(ans))$。
这里证明一下转移的时间复杂度:
直观上看是$i,j,k$三重循环。
但是每个儿子的$n^2$个dp值只会更新给它的父亲。
换句话说,有一重循环是枚举儿子,而这是一棵树,每个儿子(也就是每个点)只会被枚举一次。
所以树上背包的时间复杂度就是$O(n^2+n)$而不是$O(n^3)$。