最小生成树:对于一个无向连通图的最小生成树,选取边使得图中每个顶点连通且花费最小。

在kruskal算法中,集合A是一个森林,加入集合A中的安全边总是图中连接两个不同连通分支的最小权边。prim算法中,集合A仅形成单颗树,添加入集合A的安全边总是连接树与一个不在树中的顶点的最小权边。

kruskal在图G(v,e)上的运行时间取决于不相交集合数据结构是如何实现的,模板中采用路径优化的并查集,时间复杂度为O(1)。然后对时间复杂度有影响的就是对边的排序,其最终时间复杂度O(E lgV);

prim算法适用于边多的,反之为kruskal算法。鉴于kruskal代码的简单易操作,例题解法均为kruskal算法。

Kruskal伪代码:

(1)对所有的边从小到大排序

(2)while(n>1) do{

取权值最小的边(u,v);

if(u,v不连通){

将(u,v)加入T;

n--;

}

将边(u,v)从集合E中删除;

}

其中判断两点是否连通可使用并查集

模板:kruskal模板代码

例题及扩展:(全部做完就可以成为入门菜鸟了)

基础例题:

常用套路:n个结点的最小生成树由n-1条边构成,基础题一般会提前连接好一些点,将这些点加入并查集并计算还需加入多少边即可

难度:easy

题意:构建最小生成树,会给出一些已经连接好的点。

解析:将给出的已连接点提前加入并查集,计算还需加入多少条边才能构成最小生成树,然后加边即可。

代码:HDU-3371 Connect the cities

难度:easy

题意:构建最小生成树,使得生成树的最长边减去最短边所得的值最小。

解析:对于所有的边从小到大排序,每次枚举一个区间【L,R】,区间长度为n-1,比较每次的结果求最小值

代码:UVA 1395 Slim Span

难度:medium

题意:给一张图和多个子网,子网已经连通且花费固定,求把图连通的最小花费)

解析:运用子集生成枚举子网,每次将子网中的点提前加入并查集,计算还需加入多少条边才能构成最小生成树,再构建               生成树,比较每一次的结果取最小值

代码:UVA 1151 Buy or Build

继续学习一些概念:

(1)切割性质。假设所有边权均不相同。设S为非空也非全集的V的子集,边e是一个端点在S中,一个不在的边中权值最小的,则图所有的生成树都包含e

(2)回路性质。假设所有边权均不相同。设C为图中的任意回路,边e是C上权值最大的边,则图所有的生成树不包含e。

增量最小生成树:从包含n个点的空图开始,依次加入m条带权边。每加入一条边输出当前图的最小生成树的权值(不连通输出无解)每次求解完整的最小生成树的时间复杂度为O(m^2logn),显然不行。

可行节点数到达n-1时刚好构成一个最小生成树,后面继续加边则根据回路性质,加入边e(u,v)时,找到u到v的唯一路径上权值最大的边,与e进行比较,删除权值较大的边把其他所有边删除。

最小瓶颈生成树:给出带权无向图,求一颗生成树,使其最大边权尽可能小。(就是最小生成树)

最小瓶颈路:给出带权无向图,求u到v的一条路径,使得路径上的最长边尽量短。求最小生成树,起点终点都在树上的唯一路径就是要找的路径(uva10048)

最小瓶颈路最大边长:求出最小生成树,用dfs将其转化为有根树,计算maxcost【u】【v】,从v出发访问一个新节点u时,考虑所有已经访问过的结点x maxcost【x】【u】=max(maxcost【x】【v】,maxcost【v】【u】),复杂度为O(n^2)

次小生成树:如果最小生成树不唯一,则次小生成树的权值与最小生成树相同。

枚举要加入哪一条新边,最小生成树加入边u-v后,图中会出现一条回路,所以要删除的边在最小生成树u到v的路径上,而且是这条路径的最长边。即次小生成树一点可以由最小生成树加一条边,删去一条边得到。

所以只需要按照“每对结点间的最小瓶颈路”求出每对结点在最小生成树唯一路径上的最长边maxcost【u】【v】

生成树变种类型的问题:

难度:medium easy

题意:给出网络和某些特定的点,删除网络上的边使得这些特定点之间两两互不不连通,且花费最小。

解析:构建最大生成树(边按从大到小排序后执行kruskal算法),当一条边的两端点都是给定的点时,花费加上这条边,             反之加入最大生成树。最后得到的是多个包含一个给定点的最大生成树(一个端点也可以看做),最大生成树之间               不相连,自己思考一下为什么达到了题目的条件)

代码:HDU-4313 Matrix

难度:medium

题意:城市有人口总数,城市之间有道路,将城市连接起来的花费为B。你可以免费连接两个城市,免费连接的两个城市人             口之和为A。找一个使得A/B最大的方案

解析:先求出最小生成树,枚举u,v并删除最小生成树中u,v连接路径上边长最长的边,比较没种情况的结果

代码:UVALive - 5713 Qin Shi Huang's National Road System

转载于:https://www.cnblogs.com/zhizhaozhuo/p/9594209.html

最小生成树模板 加 例题分析 (最小生成树类型汇总)相关推荐

  1. dijkstra算法详解加例题分析 NOIP 2012 文化之旅

    首先说一下什么叫单源最短路径问题: 给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.现在要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各 ...

  2. 反手套一波回文树模板加例题就很舒服

    往上偷的板子,用起来蛮不错嘿嘿嘿. #include<bits/stdc++.h> using namespace std; const int MAXN = 300005; const ...

  3. vue-cli的webpack模板项目配置文件分析[转]

    vue-cli的webpack模板项目配置文件分析[转] 原文出处:http://blog.csdn.net/hongchh/article/details/55113751 由于最近在vue-cli ...

  4. C++对象模型9——临时对象的生命周期、模板及实例化分析、内联函数

    一.临时对象的生命周期 T c=a+b 假设T是一个类型,那么上述代码执行时,首先会产生一个临时对象用来存放a+b的结果(拷贝初始化临时对象),然后用该临时对象拷贝初始化c,最后临时对象被释放.如果开 ...

  5. Django 3.2.5博客开发教程:实现模板之前的分析与准备

    在之前的体验django模板.体验数据查询以及一些常用的模板使用方法文章里,向大家介绍了如何将数据库的数据展现到网页上,和一些简单的模板使用方法.之后我们就开始实现各种页面的展现. 在此之前,我们先从 ...

  6. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)

    文章目录 前言 树上启发式合并 引入 算法思想 时间复杂度 模板 练习 例题:CF600E Lomsat gelral solution code CF208E Blood Cousins solut ...

  7. 互斥事件的概念和公式_高中数学典型例题分析与解答:互斥事件

    高中数学典型例题分析与解答:互斥事件 (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 互斥事件互斥事件典型例题一典型例题一例例 1 今 ...

  8. Android 性能分析工具整理汇总

    Android性能分析工具整理汇总 字数1852 阅读3579 评论10 喜欢54 Android性能分析工具整理汇总 把做Android开发以来碰到的一些不错的性能分析工具做个整理汇总... Deb ...

  9. 软件设计师案例分析题答案汇总!(4)

    为大家在考前整理了软件设计师案例分析题答案汇总!考前可以速记一下. 有电子版本的,可以打印下载来看看! 第 12 问 如何区分泛化关系? 答: 泛化关系一般可以体现为 is-a 或者 has-a,也就 ...

  10. Angularjs标签模板加载原理

    前言 Angularjs提供多种模板加载方案. 最基础的为通过预先声明路径的方式,通过Ajax获取. 使用诸如gulp-html2js构建工具,将HTML模板转化为js文件使用. 使用script标签 ...

最新文章

  1. Vue(十)生命周期
  2. php中的mysql模块
  3. spring基于注解的IOC以及IoC的案例——概念
  4. 读书笔记-沙漠里的细水微光
  5. 石油大c语言答案,中国石油大学C语言答案
  6. php中数组生成下拉选项,php利用数组填充下拉列表框
  7. 利用ACS来实现AAA服务
  8. 直接插入排序比较次数_程序员必须要会的直接插入排序算法
  9. Word2Vec教程-Skip-Gram模型
  10. jQuery自动加载更多程序
  11. python写字典_用python编写字典并将其写入HDF5-fi
  12. @Scope作用域代理的应用:@RefreshScope注解实现动态刷新配置的底层原理与实现
  13. python绘图之散点图
  14. 欧姆龙PLC的FinsTCP协议
  15. Angularjs1 [$rootScope:inprog] inprogress error
  16. oracle 19c pdb cdb,12c、19c 从 no-cdb升级到pdb步骤
  17. 「译」开发者如何提升和推销自己
  18. Cipher的初应用
  19. 非线性方程求根方法——二分法
  20. 华南师范大学计算机学院学硕,华南师范大学计算机学院研究生导师简介肖菁

热门文章

  1. Atitit  如何让精灵控件运动
  2. atitit.设计模式(2) -----查表模式/ command 总结
  3. 【快讯】中国首个开源协议----木兰隆重发布
  4. 洞察|2019年混合云发展:前景广阔 巨头混战 SD-WAN成重要推手
  5. apollo代码修改配置_灰度实战(四):Apollo配置中心(4)
  6. 【三维路径规划】基于matlab麻雀算法求解无人机三维路径规划问题【含Matlab源码 212期】
  7. 【图像隐写】基于matlab LBP数字水印嵌入攻击提取【含Matlab源码 1672期】
  8. 【图像隐写】基于matlab GBT+SVD数字水印嵌入与提取【含Matlab源码 1668期】
  9. 【颜色识别】基于matlab GUI机器视觉RGB识别系统【含Matlab源码 951期】
  10. 【雷达通信】《现代雷达系统分析与设计》大作业【含Matlab源码 285期】