CF1656F
题目大意:
一张无向完全图,节点 的点权为 。每条边的边权由一个函数给出,,其中 是一个尚未确定任意实数,且对于所有边都是一致的。显然如果固定 就存在一颗最小生成树,于是定义 等于此 下最小生成树的边权和。输出 的最大值,如果不存在最大值,输出 。。
自然地对原图的每个生成树考虑,它的边权和显然是随 变化的一次函数,于是 可以被描述成所有生成树直线的取 ,显然这样产生的函数是具有凸性的。
于是这个题的做法变得清晰,先判断斜率最大和最小的两根直线是否能使得凸包具有最大值,即判断斜率是否同号。如果同号说明不存在最大值,否则在凸包上二分就可以找到最值了。至于如何找到这两个直线,直接用 Prim 贪心即可。
然后思考如何在一个固定的 下找到最小生成树。首先原式可以变形成 ,这就好办多了, 可以直接忽略不管,剩下的部分直接 Prim On 贪过去,每次用已经确定点集的最大最小值*未确定点集的最大最小值,全判一遍就行,这样比较省事,如果判正负精细实现可能会比较麻烦。似乎 Deque 就可以,也可能是我笨比了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步