博客
关于我
[学习笔记] 最小割树
阅读量:1286 次
发布时间:2019-03-05

本文共 966 字,大约阅读时间需要 3 分钟。

最小割树的构建与性质

在学习图论时,了解最小割树是一个非常有用的知识点。它用于解决一个图中两个点之间的最小割问题。虽然这在实际应用中可能不太常见,但从理论上讲,它是一个非常有趣且有趣的知识点。

最小割树的构建

最小割树的构建采用分治法。首先,随便选择两个点x和y,计算它们之间的最小割。将这条最小割的边添加到最小割树上,这样原图就被分割成了两个连通块,记为Vx和Vy。接下来,我们记录每个点属于哪个连通块,然后递归地对每个连通块重复同样的过程。

这种分治策略确保了我们最终能够构建一棵包含所有点的最小割树。每次分割都减少了问题规模,直到只剩下一个点为止。这样,整个过程就覆盖了所有点,确保了最小割树的完整性。

最小割树的性质

最小割树的最重要性质是:树上任意两点之间的路径边权的最小值,就是原图上这两点之间的最小割。为了更好地描述,我们记λ(a,b)为点a和点b之间的最小割。

定理1

对于Vx中的点a和Vy中的点b,有λ(a,b) ≤ λ(x,y)。证明过程简单明了,因为x和y的最小割将a和b分割开来,而a和b的最小割不可能比x和y的大。

定理2

对于任意三点a、b、c,有λ(a,b) ≥ min(λ(b,c), λ(a,c))。如果λ(a,b)不是这两个值中的最小值,那么它会被其中一个所限制。

定理3

在最小割树上的一条路径(x,y),路径上最小的最小割就是λ(a,b),其中a和b是在这条路径上的点。证明过程结合定理2,说明路径上的最小割不可能超过λ(x,y),同时因为构造过程,λ(x,y)也不可能比λ(a,b)小,因此两者相等。

例题

例题部分的数据似乎没有问题,但没有具体的数据,可能会影响实际应用和验证。这需要确保例题的数据完整,才能进行有效的练习和验证。

代码实现

代码实现了使用网络流算法来求解最小割,然后构建最小割树。代码中定义了边的结构,使用了BFS和DFS来计算最大流,进而求解最小割。然后,通过递归的solve函数构建最小割树,pre函数用于预处理LCA信息。lca函数用于计算两点的最低公共祖先,可能在构建最小割树时用到。

总结

虽然代码看起来复杂,但大致的思路是先构建最小割树,然后通过预处理和LCA来快速查询最小割。虽然目前不太确定代码的具体实现细节,但通过学习和理解,相信会逐渐掌握这一技术。

转载地址:http://jcozz.baihongyu.com/

你可能感兴趣的文章
OSError: no library called “cairo-2“ was foundno library called “cairo“ was foundno library called
查看>>
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
查看>>
OSGi与Maven、Eclipse PlugIn的区别
查看>>
Osgi环境配置
查看>>
OSG——选取和拖拽
查看>>
OSG中找到特定节点的方法(转)
查看>>
OSG学习:C#调用非托管C++方法——C++/CLI
查看>>
OSG学习:几何体的操作(一)——交互事件、简化几何体
查看>>
OSG学习:几何体的操作(二)——交互事件、Delaunay三角网绘制
查看>>
OSG学习:几何对象的绘制(一)——四边形
查看>>
OSG学习:几何对象的绘制(三)——几何元素的存储和几何体的绘制方法
查看>>
OSG学习:几何对象的绘制(二)——简易房屋
查看>>
OSG学习:几何对象的绘制(四)——几何体的更新回调:旋转的线
查看>>
OSG学习:场景图形管理(一)——视图与相机
查看>>
OSG学习:场景图形管理(三)——多视图相机渲染
查看>>
OSG学习:场景图形管理(二)——单窗口多相机渲染
查看>>
OSG学习:场景图形管理(四)——多视图多窗口渲染
查看>>
OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
查看>>
Sql 随机更新一条数据返回更新数据的ID编号
查看>>
OSG学习:空间变换节点和开关节点示例
查看>>