给定一个带权值的无向图,要求权值之和最小的生成树,常用的算法有Kruskal算法和Prim算法。这篇文章先介绍Kruskal算法。 Kruskal算法的基本思想:先将所有边按权值从小到大排序,然后按顺序选取每条边,假如一条边的两个端点不在同一个集合中,就将这两个端点合并到同一个集合中;假如两个端点在 ...
分类:
编程语言 时间:
2017-10-26 20:02:02
阅读次数:
228
首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最小生成树我们就一定可以找到他。(证明:首先如果我们没有选最小的边,那么他一定可以踢掉其他的边来使生成 ...
分类:
编程语言 时间:
2017-10-12 21:37:52
阅读次数:
272
一条从S到T的路径的答案为MAX/MIN。 无法直接获得最优解。 所有边按边权从大到小排序,从大到小枚举MIN,要MAX尽量小。 问题变成给你i条无向边,使S与T联通且使边权的最大值最小。 这不就是最小生成树的性质吗?Kruskal算法。 从后往前枚举每一条边,如果边连接的两个节点不在同一集合,就合 ...
分类:
其他好文 时间:
2017-10-12 20:30:49
阅读次数:
108
洛谷P2840 [USACO20DEC]Moocast(gold)奶牛广播-金就是最小生成树的模板题 蒟蒻我在这这里使用的就是最好写的Kruskal算法 (做这道题之前,最好先去把‘最小生成树模板’这道题先过了) 但是,从哪里看出这是最小生成树是一个值得一提的问题(或者说如何构图) 我的方法:以A~ ...
分类:
其他好文 时间:
2017-10-12 11:23:20
阅读次数:
166
首先总结一下概念: 什么是最小生成树呢? 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。 个人认为kruskal算法还是比较优秀的。 所以此篇重点讨论k ...
分类:
编程语言 时间:
2017-10-07 12:34:51
阅读次数:
248
其实我觉得我自己以前写的那篇blog介绍的比较生动——我的口水话:最小生成树、Prim、Kruskal算法是什么? 而本篇blog仅作为复习回顾所用,所以介绍得比较简洁。 一、最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的 ...
分类:
编程语言 时间:
2017-10-06 17:33:15
阅读次数:
319
#PS:这是我好几年前写的Blog,一直没发出来,所以和我现在的风格不大一样,but现在修改了一部分,还不错~~# 今天,我们非常愉快地学习 如何去找“图”的“最小生成树”——Prim与Kruskal算法 什么叫做生成树? 简单的来说,我先给大家讲一个故事…… 故事背景: 有一天,God?MTC告诉 ...
分类:
编程语言 时间:
2017-10-06 11:34:56
阅读次数:
240
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1083 由kruskal算法原理可知,我们对一张无向图做普通的最小生成树,连上的最后一条边就是答案。 ...
分类:
其他好文 时间:
2017-10-03 20:10:03
阅读次数:
219
分析:第一问还是很好做的,关键是怎么做第二问.我们可以每次删掉最小生成树上的一条边,然后再求一次最小生成树,看边权和大小和原来的是不是一样的,不过这个做法效率很低. 考虑Kruskal算法的原理,每次加边权最小的边,如果边上的两个点不连通.如果在最小生成树的基础上把不是上面的边给加上去,就会形成环, ...
分类:
其他好文 时间:
2017-09-29 14:04:16
阅读次数:
126
在敌人占领之前由城市和公路构成的图是连通图。在敌人占领某个城市之后所有通往这个城市的公路就会被破坏,接下来可能需要修复一些其他被毁坏的公路使得剩下的城市能够互通。修复的代价越大,意味着这个城市越重要。如果剩下的城市无法互通,则说明代价无限大,这个城市至关重要。最后输出的是代价最大的城市序号有序列表。 ...
分类:
其他好文 时间:
2017-09-21 14:47:36
阅读次数:
498