生成树问题(1)

最小瓶颈生成树:(给出加权无向图,求一棵生成树,是的最大边权尽量小)

  可以从一个空树开始,按照权值从小到大,依次加入各条边,则图第一次连通的时候,改图的最小生成树就是原图的最小瓶颈生成树。

  这一过程就是Kruskal,原图的最小生成树就是一棵最小瓶颈生成树。

最小瓶颈路:(u,v,求一条路径从 u 到 v ,是的路径上的最长边短)

  1、可以用 Dijkstra 松弛条件的变形;

  2、二分答案,看这个结果是不是可以使得 u 到达 v ,怎么看 u 是否能够到达 v ,就是 BFS;

  3、先求出这个图的最小生成树。则 u 和 v 在书上的唯一路径就是要找的路径,这个路径上的最长边,就是最小瓶颈;

每对结点间的最小瓶颈路:

  这个问题在上一篇文章中提到,再复习一下;http://www.cnblogs.com/TreeDream/p/6135786.html

  有了前面的经验,不难想到先求出最小生成树。

  接下来,用DFS吧最小生成树变成有根树,同时计算 f(u,v);

  当新访问一个结点 u 的时候,考虑所有已经访问过的老结点 x ,更新 f(x,u) = max( f(x,v) , w(u,v) )    (v 是 u 的父亲结点);

时间: 2024-10-21 23:46:30

生成树问题(1)的相关文章

最小生成树问题

最小生成树问题 #include <iostream> using namespace std; #define MAX 20 #define INF 32767 int edges[MAX][MAX]; void prim(int v,int arr[MAX][MAX]) { int n=8; int lowcost[MAX]; int min; int closest[MAX],i,j,k; for(i=0;i<n;i++) { lowcost[i]=arr[v][i]; close

关于最小生成树问题

我们通过一个例子来看一下最小生成树的求法. 分别用普里姆算法(从A结点开始)和克鲁斯卡尔算法计算下图的最小生成树. ok,首先运用Prim算法进行计算: U V-U B C D E F TE {A} {B,C,D,E,F} AB 11 AC 13 ~ ∞ AE 16 ~ ∞ AB 11 {A,B} {C,D,E,F}   BC 7 BD 3 AE 16 BF 5 BD 3 {A,B,D} {C,E,F}   BC 7   AE 16 BF 5 BF 5 {A,B,D,F} {C,E}   BC

次短路径与次小生成树问题的简单解法——转自:BYVoid

次短路径与次小生成树问题的简单解法 [次短路径] 次短路径可以看作是k短路径问题的一种特殊情况,求k短路径有Yen算法等较为复杂的方法,对于次短路径,可以有更为简易的方法.下面介绍一种求两个顶点之间次短路径的解法. 我们要对一个有向赋权图(无向图每条边可以看作两条相反的有向边)的顶点S到T之间求次短路径,首先应求出S的单源最短路径.遍历有向图,标记出可以在最短路径上的边,加入集合K.然后枚举删除集合K中每条边,求从S到T的最短路径,记录每次求出的路径长度值,其最小值就是次短路径的长度. 在这里我

杭电1233——还是通畅工程~简单最小生成树问题

这题,典型的最小生成树问题,可以用Kruskal算法来实现,配合着并查集来高效求解. 先将各边按权值进行从小到大排列.遍历一个各边便可求解,时间复杂度为O(|E|log|V|),其中E为边的个数,V为顶点数. 下面是AC代码,代码中有注释: #include <iostream> #include <cstdio> #include <algorithm> using namespace std; class data { public: int from, to, c

数据结构--图(下)--最小生成树问题

最小生成树问题 村村通中,修路,最少的钱就连通起来了.连通图.最少的边, prim算法 思路是:从根节点开始让一棵小树慢慢长大

浅入浅出数据结构(25)——最小生成树问题

上一篇博文我们提到了图的最短路径问题:http://www.cnblogs.com/mm93/p/8434056.html.而最短路径问题可以说是这样的一个问题:路已经修好了,该怎么从这儿走到那儿?但是在和图有关的问题中,还有另一种有趣的问题:修路的成本已经知道了,该怎么修路才能尽可能节约成本,同时将这些地方都连起来? 比如我们知道有这么几个城市,它们互相之间还没有路: 经过实地考察后,发现可以修的路以及各条路的修路成本如下: 但是我们的预算有限,需要在修路时尽可能的省钱(也就是尽量减小所有边的

最小生成树问题(prim算法)POJ-1258 Agri-Net

/* 这个题很水,但是,莫名其妙runtime error一晚上,重写了一遍就又没了,很伤心! 题意很简单,大致为n个村庄,连光缆,要求连上所有村庄的长度最短. 输入n,接着是n*n的矩阵,直接用prim算法写就行: */ #include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath>

POJ2831(次小生成树问题)

Can We Build This One? Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 1475   Accepted: 546 Case Time Limit: 2000MS Description “Highways are built, then life is rich.” Now people of Big Town want to become rich, so they are planning to

并查集/生成树问题 | 问题集合

写在前面 似乎没什么可以写的? 那还是扯一下吧. 题目大部分带题号没给特殊地址/链接的都是洛谷的题 然后亲戚和朋友两道题库被我刷烂的题我就不搬进来了(:懒 P1536 村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可).请你计算出最少还需要建设多少条道路? 输入格式: 每个输入文件包含若干组测试测试数据,每组测试数据的第一行给出

&lt;hdu - 1863&gt; 畅通工程 并查集和最小生成树问题

本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863  Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现请你编写程序,计算出全省畅通需要的最低成本.  Input: 测试输入包含若干测试用例.每个测试用例的第1行给出评估的道路条数 N.村庄数目M ( < 100