主要思想是贪心。 先将所有的边按照边权从小到大排序。 按照排好的顺序判断每一条边是否能够造成整个图中出现回路,如果不能则将该条边加入图中,并将两个顶点联通(并查集中的”并“)。 如果边的条数达到n-1,则跳出循环。此时得到的生成树便是最小生成树。 ...
分类:
编程语言 时间:
2018-02-23 19:06:34
阅读次数:
194
次小生成树 次小生成树 我们已经熟知了求最小生成树的方法,用kruskal,prim算法都可以搞 那么我们如何求次小生成树呢? 这里次小生成树的定义是 边权和严格大于最小生成树的边权和最小的生成树 求解方法 次小生成树嘛,肯定和最小生成树脱不了关系 那么我们首先求出最小生成树 接下来,一个比较显然的 ...
分类:
其他好文 时间:
2018-02-21 23:03:30
阅读次数:
237
BZOJ_1196_[HNOI2006]公路修建问题_kruskal+二分答案 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 分析: 先把所有路都拆成两条。 二分答案mid,把大于mid的边除去,优先加一级公路,判断能不能加进去k条。 ...
分类:
其他好文 时间:
2018-02-21 20:03:36
阅读次数:
180
Prim的算法的具体思路是从某个点开始用贪心的策略向外扩展,找到离当前生成树最近的节点加入树中,并用该节点更新生成树到其他节点的距离。显然复杂度O(n^2),而且有一个二倍的常数(一共扩展n次,每次找最近的点是O(n)的,用该点更新其它点在稠密图时也是O(n)的)。 然后某些大佬就想到可以用堆维护当 ...
分类:
其他好文 时间:
2018-02-21 19:20:30
阅读次数:
194
- 题目大意 给出N个点,M条边,求出一棵包含N个点的树,且树的最大权值-最小权值达到最小。 - 解题思路 我们可以先把边排序,枚举最小的,然后利用kruskal加边,当图第一次连通的时候当前的边就是尽可能小的最大边,更新答案即可。 - 代码 ...
分类:
其他好文 时间:
2018-02-15 13:55:36
阅读次数:
162
- 题目大意 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。因此求出最少的成本为多少? - 解题思路 最小生成树的问题,用kruskal算法,kruskal ...
分类:
其他好文 时间:
2018-02-15 13:36:37
阅读次数:
145
- 题目大意 某地发洪水,导致某些城市被淹而消失,现在想把剩下的零散的城市通过修路连接起来,已知现在有部分城市是连通的。可选择修的路有m条,城市总共有n个,给出了m条路的起点终点和修路花费,问最少可花多少钱能保证所有的城市连通。 - 解题思路 可以用kruskal。把边权排序然后并查集添加边即可。 ...
分类:
其他好文 时间:
2018-02-15 13:36:30
阅读次数:
135
传统的Prim算法或者是Kruskal算法求最小生成树时,要先把图创建出来,就比较麻烦。 如果用并查集来解决,依次选取权值最小的边,判断它们是否在一个并查集内,如果在则舍去,如果不在则加入,简单了很多。 题目描述 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标 ...
分类:
其他好文 时间:
2018-02-13 20:59:22
阅读次数:
193
对于一个边上具有权值的图来说,其边权值和最小的生成树叫做图G的最小生成树 求无向图最小生成树主要有prim和kruskal两种算法 1.prim 将点集V分成Va和Vb两部分,Va为已经连入生成树的点,Vb为没有连入的点,按照边的大小逐渐向Va中加点,直到Va中包含所有点,具体步骤,复杂度O(mlo ...
分类:
其他好文 时间:
2018-02-12 18:44:19
阅读次数:
161
#include #include using namespace std; int f[20000],n; struct node { int u,v,val; bool operator >n) { ans=0; k=(n*(n-1))/2; for(int i=1;i>e[i].u>>e[i]... ...
分类:
编程语言 时间:
2018-02-12 16:45:15
阅读次数:
153