带有度限制的最小生成树

概念:在一个无向图中,在某个特殊点限制了必须为k度的情况下,而求出的最小生成树。

一些阐述

[关于字母]:

设边集为E,特殊点为V0,最小限制生成树为D。

Hi表示V0的度数为i时的最小生成树。

[关于操作]:

删添操作:在树上加入某条顶点为V0的点,在构成的环中删掉另一条不与V0关联的边。

最大删添:删添时去掉环中最大的一条不与V0关联的边。

差额最大删添:加入的边与最大删添的差值最大的一次删添。

原理:见黑书p300-p303。

证明有些复杂,于是跳过证明得到定理一:

若T为V1...Vn的某棵最小生成树,若边(i,j)不属于T,则(i,j)不属于D。

这样可以大大缩小选择边的范围。

定理二:

H1为T的基础上加一条最短的(V0,Vi)

H1可以通过k-1次差额最小删添操作得到Hk。

这样可以方便我们从H1逐渐递推到Hk

具体步骤

1.找到V1...Vn的所有连通块,求出每个连通块的最小生成树Ti。

2.在每个块中选出一条最小的与V0相连的边
[
若块的数目t>k则无解
],从而得到Ht。

3.for
i=t+1 to k

通过Hi-1 上进行“差额最小删添操作”,添加并删除一条边得到Hi。

其中差额最小删添操作的优化可以用:令Maxi表示Vi到V0的路径上的最大边,那么连上(V0,Vi)的代价就是f(Vi)=w(V0,Vi)-Maxi,所有f(Vi)中的最小值就是差额最小删添操作。

Maxi的预处理需要O(n)从V0开始dfs,每次选了一条(V0,Vi)后则需要从Vi再跑一次,也是O(n)的。

4.输出答案

题目练习:Poj 1639 Picnic Planning野餐计划

还没打过代码...未完待续

时间: 2024-10-10 13:42:36

带有度限制的最小生成树的相关文章

[kuangbin带你飞]之'最小生成树 '专题(未完成)

带飞网址: https://vjudge.net/article/187 专题六: POJ 1251 Jungle RoadsPOJ 1287 NetworkingPOJ 2031 Building a Space StationPOJ 2421 Constructing RoadsZOJ 1586 QS NetworkPOJ 1789 Truck HistoryPOJ 2349 Arctic NetworkPOJ 1751 HighwaysPOJ 1258 Agri-NetPOJ 3026 B

无向带权图的最小生成树算法——Prim及Kruskal算法思路

边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以把边上的权值解释为线路的造价.则最小生成树表示使其造价最小的生成树. 构造网的最小生成树必须解决下面两个问题: 1.尽可能选取权值小的边,但不能构成回路: 2.选取n-1条恰当的边以连通n个顶点: MST性质:假设G=(V,E)是一个连通网,U是顶点V的一个非空子集.若(u,v)是一条具有最小权值的

Java数据结构——带权图

带权图的最小生成树——Prim算法和Kruskal算法 带权图的最短路径算法——Dijkstra算法 package graph; // path.java // demonstrates shortest path with weighted, directed graphs 带权图的最短路径算法 // to run this program: C>java PathApp ////////////////////////////////////////////////////////////

求最小生成树(Prim算法)(1075)

Description 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经给出了部分代码,你只需要完善Prim算法即可. Input 第一行为图的顶点个数n      第二行为图的边的条数e 接着e行为依附于一条边的两个顶点和边上的权值 Output 最小生成树中的边. Sample Input ABCDEF A B 6 A C 1 A D 5 B C 5 C D 5 B E 3 E C 6 C F 4 F D 2 E F 6 Sample Output (

算法10 之带权图

上一节我们已经看到了图的边可以有方向,这一节里,我们将探讨边的另一个特性:权值.例如,如果带权图的顶点代表城市,边的权可能代表城市之间的距离,或者城市之间的路费,或者之间的车流量等等. 带权图归根究底还是图,上一节那些图的基本操作,例如广度优先搜索和深度优先搜索等都是一样的,在这一节里,我们主要来探讨一下带权图的最小生成树最短路径问题. 最小生成树问题 首先探讨下最小生成树问题,它与上一节所提到的最小生成树不同.上一节的最小生成树是个特例,即所有边的权值都一样.那么算法如何设计呢?建议用优先级队

最小生成树算法总结

算法总结第5弹,最小生成树,有关生成树的问题有很多,这里先介绍个最常用的吧. 最小生成树 首先,生成树是建立在无向图中的,对于有向图,则没有生成树的概念,所以接下来讨论的图均默认为无向图.对于一个有n个点的图,最少需要n-1条边使得这n个点联通,由这n-1条边组成的子图则称为原图的生成树.一般来说,一个图的生成树并不是唯一的(除非原图本身就是一棵树). 现在考虑带权图G,即图的边带权,则最小生成树就是在G中权值和最小的一颗生成树,显然最小生成树也不是唯一的,但是其权值唯一.有很多应用需要用到最小

最小生成树之Prim Kruskal算法(转)

最小生成树 首先,生成树是建立在无向图中的,对于有向图,则没有生成树的概念,所以接下来讨论的图均默认为无向图.对于一个有n个点的图,最少需要n-1条边使得这n个点联通,由这n-1条边组成的子图则称为原图的生成树.一般来说,一个图的生成树并不是唯一的(除非原图本身就是一棵树). 现在考虑带权图G,即图的边带权,则最小生成树就是在G中权值和最小的一颗生成树,显然最小生成树也不是唯一的,但是其权值唯一.有很多应用需要用到最小生成树的概念,比较直观的一个应用就是:有n个村庄,现在要在这些村庄之间修一些路

基于mapreducer的图算法

作者系阿里巴巴集团1688技术部普通码农 引言 周末看到一篇不错的文章"Graph Twiddling in a MapReduce world" ,介绍MapReduce下一些图算法的实现.文章语言质朴,介绍很多实用图优化技巧.文章2009年发表,至今已经被引用183次,足以证明这篇文章价值.目前这篇文章网上已经有人对这篇文章做了介绍,但仅介绍了其中最简单的两个算法,对其中的所做优化,并没有做分析.为了加深对文章算法的理解,我重新对这篇文章的算法做了翻译,同时加了自己的理解,以及算法

20162328蔡文琛 week11 大二

20162328 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 在无向图中,表示边的顶点对是无序的. 如果图中的两个顶点之间有边链接,则称它们是领接的. 如果无向图中连接顶点的边数达到最大,则称为完全图. 路径是图中连接两个顶点的边的序列. 第一个顶点和最后一个顶点相图且边不重复的路径称为环. 在有向图中,边是顶点的有序对. 有向图中的路径是连接图中两个顶点的有向边的序列. 图的每条边上都有对应的权值的图称为带权图. 图的深度优先遍历与广度优先遍历的主要差异