题意:在N*M的迷宫上,从S点出发找一条最短的路径走遍所有的A,且在S和A处可以分成多组同时走,可以分叉,这样就先求出所有点两两之间的距离,找到一棵最小生成树,树上所有边的和就是要求的最小值。...
分类:
其他好文 时间:
2014-10-18 14:07:37
阅读次数:
228
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程能够用一个图来表示。这里的图的选择借用了Wikipedia上的那个。很清晰且直观。首先第一步,我们有一张图,有若干点和边例如以下图所看到的:第一步我们要做...
分类:
编程语言 时间:
2014-10-13 21:00:27
阅读次数:
211
克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程能够用一个图来表示。这里的图的选择借用了Wikipedia上的那个。很清晰且直观。首先第一步,我们有一张图,有若干点和边例如以下图所看到的:第一步我们要做...
分类:
编程语言 时间:
2014-10-11 17:40:45
阅读次数:
208
orz,感觉对最小生成树的理解又加进了一步。ps:不得不说对于经典算法的探究是永无止境的,只能通过交流和增长见识来学习和体会,自己研究确实困难。让我们来深入分析一下kruskal算法。算法过程不多说,直接证明:假设算法考虑到第k条边,这时发现边的两端已经在同一个连通块里面了(称为“冲突”),为了使这...
分类:
Web程序 时间:
2014-10-07 17:41:53
阅读次数:
151
大水题,真不知道出题者是怎么把这么水的题出的这么长的TAT其实这题在于考语文水平,一共三个要求,前两个要求意思就是要选出的道路是树形的,最后一个要求就是要权值最小,于是整个题意说白了就是求一棵MST,以前向星的形式给出最容易想到kruskal算法,于是这题顺利结束,从看题一直到调试结束半个小时搞定…...
分类:
其他好文 时间:
2014-10-05 16:20:38
阅读次数:
197
一,什么是最小生成树
1,什么是生成树
如果连通图G的一个子图是一棵包含G所有顶点的树,则该子图成为G的生成树。
生成树是含有该连通图全部顶点的一个极小连通子图,它并不是唯一的,从不同的顶点出发可以得到不同的子树。含有N个顶点的连通图的生成树有N-1条边。
2,如何求一个连通图
的生成树
要求一个连通图的生成树只需要从一个顶点出发,做一次深度优先或...
分类:
其他好文 时间:
2014-10-04 20:58:47
阅读次数:
155
理论:Prim:基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V)、TE={}开始。重复执行下列操作:在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边(u0,v0)并入集合TE中,同时v0并入U,直到V=U为止。此时,TE中必有n-1条...
分类:
其他好文 时间:
2014-10-04 20:02:37
阅读次数:
503
题目大意:给定一个n个点m条边的无向连通图,k次询问两点之间所有路径中最长边的最小值
NOIP2013 货车运输,几乎就是原题。。。只不过最小边最大改成了最大边最小。。。
首先看到最大值最小第一反应二分答案 但是二分答案O(kmlogn)明显做不了 这里我们考虑最小生成树
先生成一棵最小生成树,然后每次询问利用倍增LCA求出路径上的最大权值即可
本蒟蒻居然把LCA写挂了。。。 而且样例还过...
分类:
Web程序 时间:
2014-10-03 17:28:54
阅读次数:
275
尽管堆优化的Prim用于处理稠密图不错,但是实际上很少有题目稠密图。所以一般直接上用并查集优化的Kruskal,简洁高效。int find(int x) {return x!=p[x]?p[x]=find(p[x]):x;}struct edge{ int u,v,c;}Edge[10001]...
分类:
其他好文 时间:
2014-10-02 21:46:13
阅读次数:
243