首先让我们来介绍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
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0 ty ...
分类:
其他好文 时间:
2017-10-08 15:34:01
阅读次数:
197
题意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小边长总和是多少。 思路: 先处理空间点之间的距离,要注意的是两个球面相交的情况,相交的话距离是0。两球面距离是球心距离减去两个球的半径(边权 = A ...
分类:
其他好文 时间:
2017-10-08 13:37:34
阅读次数:
208
题意: 给出n个节点,再有m条边,这m条边代表从a节点到b节点电缆的长度,现在要你将所有节点都连起来,并且使长度最小 思路: 这是个标准的最小生成树的问题,用prim的时候需要注意的是他有重边,取边最小的那条加入图里就可以了,但是kruskal可以忽略这个问题 代码: prim: #include ...
分类:
Web程序 时间:
2017-10-07 22:46:34
阅读次数:
175
200ms的板子,我尽力了,以我自己的能力没法再快了。。。 基于Kruskal的做法,跑了200ms,以我自己的能力没办法再快了,不过翻了几页评测列表发现我是最快的。。。我觉得应该会有更快的方法。想法很简单,既然是最小生成树,把所有边按照边权升序排序,每次取一条最小权值的边,询问是否不在同一集合,如 ...
分类:
其他好文 时间:
2017-10-07 14:39:59
阅读次数:
137
首先总结一下概念: 什么是最小生成树呢? 一个有 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