其他分享
首页 > 其他分享> > 022(北极通讯网络)(最小生成树)

022(北极通讯网络)(最小生成树)

作者:互联网

题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1487

题目思路:很明显的最小生成树

最小生成树,一般在实际生活中用于解决修建铁路或是服务器链接的问题

具体就是给你 n 个点,让你把这 n 个点拼起来,使其两两相通

但是吧,每连起来两个点都会花钱,最小生成树就是为了找到钱最少的一种连法

在这种最小生成树上,衍生出了一种叫 “MST” 的东西,一个算法,以及一个定理

MST性质:假设N = (V,{ E })是一个连通网,U 是顶点集V的一个非空子集。若(u , v )是一条具有最小权值(代价)的边,其中u∈U, v∈V - U,则必存在一棵包含边(u,v)的最小生成树。

看不懂没关系,它通俗来讲,就是把所有顶点分成两块,这两块里面各取一个顶点,如果这俩货连起来要花的代价相对于其他的,让这两块顶点区域相通的边最小,那么我们最终的成品,肯定有这条边在里面

那么,依照这个性质,我们又想到了“并查集”这个算法

最开始,每一个顶点我们就看成一个块,叫做“单元素集合”,什么 U,U1,U2......U8......U10086全都整上

然后,按照“最小”的字眼挑两个幸运的 U ,让他们作为一个大块里的 U 和 V 

前面说好的“必存在一棵包含边(u,v)的最小生成树”,那么接下来,U,V凑起来之后,他们就成了新的块,暂且命名 U10087

然后,继续按照“最小”的字眼,一个一个的小块融合成大块,最终由多变一,树来!

而那个定理呢?试想一下有 3 个点构成了一个环,咱能不能删去一条边?可以

如果是 n 个点被拼成了一个类似于圆的玩意呢?我们也能删去一条边。

所以说,把 n 个点拼在一起,最多只需要 n-1 条边

即使不按照”环“的方式去连,等到过了 n-1,就连最优解都不是了。

所以,"把 n 个点拼在一起,最多只需要 n-1 条边",

这对于一整个大顶点集中的一小部分也同样适用

换句话说,在最小生成树里不可能出现闭环

现在,看到“最小”那个字眼了吗,尘封多年的“贪心”又可以用了

在"MST"和“贪心”的共同作用下,衍生出了一种算法:kruskal

首先是一大堆的顶点,这是我们做题的先提条件

然后,或是利用坐标求或是人家给,把顶点与顶点之间连接的代价搞出来

用结构体存下来对应的点和边,按照边的大小排排坐,小的在前面

然后就可以开干了

首先,我们需要找一个数组 f,f[i]=j,代表顶点 i 和 j 被放在了一个块里

而我们又能干出 f[j]=k 的玩意,这样就把两个

最开始的时候,f[i] 都是 i,代表

 

标签:通讯,个点,北极,一个,最小,生成,022,条边,顶点
来源: https://www.cnblogs.com/a-001/p/16390106.html