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