先来转换一下题意:首先,所有点一定与公园连通,否则的话存在一个人到不了公园;其次一条边最多被经过一次,否则的话第一次经过的车可以在起点等着,等到第二辆车到,然后两辆车合为一辆车。综上,我们选取的边至少要有条边,每选取一条边就将这条边的权值计算到答案中(如果一条边被选取了却不计算答案,那么就说明这条边没有被经过,也就是说去除这条边不影响答案,也就是只将经过的边加入到最终的图中),所以为了权值最小又为了连通,我们只用求MST即可
首先这里有个严谨的拟阵证明
然后来讲一下蓝书的做法
根据这道题目的题解的证明的做法,我们只需要证明每次删边都不会删除与相关联的边就好了
利用数学归纳法
假设我们此时(设这个时候为)找到的非树边为(在之前所删除的边都是与无关的边),然后就形成了一个环,假设这个换上除了这条边之外,权值最大的边为导致要删除,也就是说长成下面这个样子

如果说的边权小于,那么算法就结束了,所以假设的边权更小
此时考虑被加入的时候
假设是最开始加入的条边中的一条边,那么显然就有的边权大于的边权,矛盾,所以只能是后面加入的;然而根据归纳假设,被加入的时候(设这个时候为)删除的一定是一条与无关的边,也就是说某个连通块由于删边(设这条边为)被分成了两部分,那么这个时候有加入这条边更优,因为我们在时加入后形成了一个环,由于每个操作都只会删除边而不会添加边,所以说时加入环仍然存在,删除显然仍然可以从走到再走到,而在时加入会形成一个环(且在这个环上,显然在和之间),那么就说明在时我们加入而不是加入仍然会形成一个环且在这个环上,于是加入删除就是更优的选择
综上得证
提一下,这道题目代码挺难写的,可以看一下
最后来说一下这道题目怎么用wqs二分做
由于wqs二分是恰好找度点,所以必须分两种情况讨论(假设这个函数的极值点是):
我们先直接求一遍最小生成树,那么号点的度数肯定就是;如果,那么这肯定是最优的答案;否则的话,根据凸函数的性质,号点的度数一定恰好为的时候最优,那么此时就可以用wqs二分了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构