野餐规划

先来转换一下题意:首先,所有点一定与公园连通,否则的话存在一个人到不了公园;其次一条边最多被经过一次,否则的话第一次经过的车可以在起点等着,等到第二辆车到,然后两辆车合为一辆车。综上,我们选取的边至少要有n1条边,每选取一条边就将这条边的权值计算到答案中(如果一条边被选取了却不计算答案,那么就说明这条边没有被经过,也就是说去除这条边不影响答案,也就是只将经过的边加入到最终的图中),所以为了权值最小又为了连通,我们只用求MST即可

首先这里有个严谨的拟阵证明

然后来讲一下蓝书的做法

根据这道题目的题解的证明的做法,我们只需要证明每次删边都不会删除与1相关联的边就好了

利用数学归纳法

假设我们此时(设这个时候为T0)找到的非树边为(1,a)(在之前所删除的边都是与1无关的边),然后就形成了一个环,假设这个换上除了(1,a)这条边之外,权值最大的边为(1,b)导致要删除(1,b),也就是说长成下面这个样子

如果说(1,b)的边权小于(1,a),那么算法就结束了,所以假设(1,a)的边权更小

此时考虑(1,b)被加入的时候

假设(1,b)是最开始加入的T条边中的一条边,那么显然就有(1,a)的边权大于(1,b)的边权,矛盾,所以(1,b)只能是后面加入的;然而根据归纳假设,(1,b)被加入的时候(设这个时候为T1)删除的一定是一条与1无关的边,也就是说某个连通块由于删边(设这条边为e)被分成了两部分,那么这个时候有加入(1,a)这条边更优,因为我们在T0时加入(1,a)后形成了一个环1>a>b>1,由于每个操作都只会删除边而不会添加边,所以说T1时加入(1,a)1>a>b>1仍然存在,删除(1,b)显然仍然可以从1走到a再走到b,而在T1时加入(1,b)会形成一个环1>b>c>1(且e在这个环上,显然ebc之间),那么就说明在T1时我们加入(1,a)而不是加入(1,b)仍然会形成一个环1a>b>c>1e在这个环上,于是加入(1,a)删除e就是更优的选择

综上得证

提一下,这道题目代码挺难写的,可以看一下

最后来说一下这道题目怎么用wqs二分做

由于wqs二分是恰好找s度点,所以必须分两种情况讨论(假设这个函数的极值点是x0):

我们先直接求一遍最小生成树,那么1号点的度数肯定就是x0;如果x0s,那么这肯定是最优的答案;否则的话,根据凸函数的性质,1号点的度数一定恰好为s的时候最优,那么此时就可以用wqs二分了

posted @   最爱丁珰  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示