次小生成树的某些结论及其算法O(V^2)
结论1
次小生成树可由最小生成树换一条边得到.
证明:
可以证明下面一个强一些的结论:
T是某一棵最小生成树,T0是任一棵异于T的树,通过变换
T0 --> T1 --> T2 --> ... --> Tn (T) 变成最小生成树.
所谓的变换是,每次把Ti中的某条边换成T中的一条边, 而
且树T(i+1)的权小于等于Ti的权.
具体操作是:
step 1. 在Ti中任取一条不在T中的边uv.
step 2. 把边uv去掉,就剩下两个连通分量A和B,
在T中,必有唯一的边u'v' 连结A和B.
step 3. 显然u'v'的权比uv小 (否则,uv就应该在T中).
把u'v'替换uv即得树T(i+1).
特别地:取T0为任一棵次小生成树,T(n-1) 也就是次小生成树且
跟T差一条边. 结论1得证.
算法:
只要充分利用结论1, 即得V^2的算法. 具体如下:
step 1. 先用prim求出最小生成树T.
在prim的同时,用一个矩阵max[u][v] 记录 在T中连结任意两点u,v的唯一的
路中权值最大的那条边的权值. (注意这里).
这是很容易做到的,因为prim是每次增加一个结点s, 而设已经标号了的结点
集合为W, 则W中所有的结点到s的路中的最大权值的边就是当前加入的这条边.
step 1 用时 O(V^2).
step 2. 枚举所有不在T中的边uv, 加入边uv则必然替换权为max[u][v]的边.
故总时间为O(V^2).
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=1881602
次小生成树的某些结论及其算法O(V^2)相关推荐
- 644-最小生成树Prim普里姆算法
最小生成树Prim普里姆算法理论 最小生成树的应用场景:顶点代表城市的话,比如说修路,架设电线,网络,怎么让这几个城市连起来,而且花费是最小的,成本最低,权值是最小的,但是不允许形成环路. 第一步的U ...
- NYOJ 118 修路方案(次小生成树)
修路方案 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...
- 图论 —— 生成树 —— 次小生成树
[概述] 对于给定的无向图 G=(V,E),设 T 是图 G 的一个最小生成树,那么,对于除 T 外的第二小的生成树 T' 即为图的次小生成树. 简单来说,最小生成树是生成树的最小解,次小生成树是生成 ...
- 非严格次小生成树+严格次小生成树
非严格次小生成树+严格次小生成树 非严格次小生成树:首先使用最小生成树算法将最小生成树求出来,将生成树建图,然后用倍增维护树上的最大值. 考虑将所有的非树边一次加入最小生成树,并将新边与最小生成树形成 ...
- 【次小生成树】4.秘密的牛奶运输
题目描述 Farmer John 要把他的牛奶运输到各个销售点.运输过程中,可以先把牛奶运输到一些销售点,再由这些销售点分别运输到其他销售点. 运输的总距离越小,运输的成本也就越低. Farmer J ...
- 最小生成树、次小生成树
一.最小生成树 说到生成树首先要解释一下树,树是一个联通的无向无环图,多棵树的集合则被称为森林. 因此,树具有许多性质: 1.两点之间的路径是唯一的. 2.边数等于点数减一. 3.连接任意两点都会生成 ...
- HDU 4081 Qin Shi Huang's National Road System (次小生成树算法)
转载自http://blog.csdn.net/shuangde800 D_Double 题目: Problem Description During the Warring States Perio ...
- 疯子的算法总结11--次小生成树+严格次小生成树
一.总体思路 首先,我这一题的思路是倍增LCA+Kruskal 首先,kruskal求最小生成树 不会的戳这里 求次小生成树 倍增 LCA 关键在于次小生成树怎么求: 问自己一些问题 怎么求不严格 ...
- 一棵树的生成树有几颗_次小生成树(树剖,生成树)
生成树的概念: 在一个无向图中,设顶点数为\(n\),取其中\(n-1\)条边并使所有点相连,所得到的一棵树即为生成树. 最小生成树: 如果还没有接触过生成树的同学,欢迎戳->最小生成树详解 次 ...
- (luogu4180) [Beijing2010组队]次小生成树Tree
严格次小生成树 首先看看如果不严格我们怎么办. 非严格次小生成树怎么做 由此,我们发现一个结论,求非严格次小生成树,只需要先用kruskal算法求得最小生成树,然后暴力枚举非树边,替换路径最大边即可. ...
最新文章
- Android onMeasure过程分析
- 【数据挖掘】拉普拉斯修正 ( 判别模型 | 概率模型 | 贝叶斯分类 | 拉普拉斯修正 | 朴素贝叶斯分类应用场景 | 朴素贝叶斯优缺点 )
- 掌握这些 NumPy Pandas 方法,快速提升数据处理效率!
- JS 事件绑定的几种方式 小笔记
- ABBYY FineReader 12PDF选项卡之图像及文字设置
- MySQL(一):分别基于mysqldump、lvm2、xtrabackup三种方式实现备份恢复
- ubuntu18.4 中 mysql5.7 全完卸载与安装
- 【转载】白话经典算法系列之三 希尔排序的实现
- C++算法之遗传算法及实现
- 网络层-IP地址和MAC地址
- 如何将你的网站提交到Google
- 什么是 Pandas?
- Hadamard积的介绍
- 应用楼宇自控系统降低建筑物设备成本
- 教育专家李彦良谈双减后的素质教育和智慧教育
- 引领边吃边逛新时尚 9月19龙德广场B1“潮人街区”正式开街迎客
- MODEL COMPRESSION VIA DISTILLATION AND QUANTIZATION
- 解决 : ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directo
- 最全RAID( RAID 0、RAID 1、RAID 5、RAID 10 ······) 以及它们的优缺点以及原理解析
- android3d编程,Android编程实现3D立体旋转效果的实例代码