货车运输

借这一道题目来介绍一下最小瓶颈路和Kruscal重构树

首先本来这道题目我其实是没看出来是最大生成树的(因为不知道上面两个东西),然后我想的是二分,当然也可以做,但是复杂度多一个log

对上面两个东西的介绍见OI-wiki

下面是一些解释

最小瓶颈路的性质的第一句话说“根据最小生成树定义”,其实这个根据定义是出不来的,我们需要证明,而且这个证明不是简单的反证法就可以证明成功的,要用比较复杂的反证

我们考虑某一对点(u,v),如果其最优路径不在MST上,那么这条最优路径就存在一条边(x,y)且这条边不在MST上

对这样的一条边,我们考虑Kruscal算法的过程,当遍历到这条边的时候,我们没有将这条边加入Kruscal,因为这条边的两个端点已经存在一条路径了,而且这条路径上的每一条边都是最终MST上的边且这些边的权值都更小,于是我们就可以将这条边替换为一条由全部在MST上的边组成的路径。也就是说,我们可以将我们找到的任意一条其他的非MST路径上不是MST中的边全部换成若干条MST上的边,而且最大边权会变小(或者至少不会变差),所以最后所有边都是MST上的边而且答案不会更劣;由于MST上(u,v)只有一条路径,所以说这就是最优的答案

我们以上的证明过程也说明我们随便求一个MST就好了

另一种证明方法:假设从st存在一条更优的道路P,那么MST上不是所有边都在P上,设(u,v)是MST上从st的边权最大的边,显然其不是P上的边,删掉(u,v)后,s,t被分到了两个连通块;由于(u,v)是最小生成树的边,所以把边权严格小于(u,v)的边全部加入之后,stPs,t$连通矛盾

然后这道题目只会用到最小瓶颈路

接下来介绍一下Kruscal重构树

定义中说“得到了一颗恰有n个叶子的二叉树”,实际上这些叶子全部都是原图中的点(也就是说新添加的点都不是叶子),这个用数学归纳法可以证明;“非叶子节点恰有两个儿子”也可以用数学归纳法证明

那么为什么

第一个等号见上文证明;第二个等号我们来考虑Kruscal的过程

对于(u,v)在MST上的路径,我们找出其边权最大的边,这条边是这条路径中最后被添加到MST中的边

在添加这条边之前,uv各自在两个连通块中,而且这两个连通块都是树,u或者v一直往上面走最终会走到各自连通块的根节点;添加这条边之后,我们连接了两个连通块(树)的根节点,并且将这两个根结点作为新连通块根节点的左右儿子,所以这个时候uv各自往上面走,就会走到这个新连通块的根节点,所以这个根节点就是两者的LCA,且这个LCA的点权刚好是我们添加的最后一条边的边权,也就是路径的最大值

我们还可以发现,最终得到的Kruscal重构树,父亲的权值一定不会低于两个儿子的权值,也就是说深度越浅权值越大

其实最简单的理解方式就是在某一时刻,原图形成的若干个连通块对应着Kruscal重构森林中的某一颗树,于是所有性质都很显然了

posted @   最爱丁珰  阅读(79)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示