
最小生成树
最小生成树相关题目的题解
Alphacoo
这个作者很懒,什么都没留下…
展开
-
AcWing 1140. 最短网络
题目链接 题意 给出n个点,并给出所有点之间的距离,本质就是求一张无向连通图的最小生成树 分析 从题目来看,这题的数据是保证有解的,还有按照输入格式来看,这应该是稠密图,使用邻接矩阵来存储图 解决方案 直接套用prim算法就行了 代码 #include <iostream> #include <cstring> using namespace std; const int N = 105; //g为邻接矩阵,d为每个点到集合S的距离(会一直更新),n为点数,ans为最小生成树原创 2020-09-16 09:05:41 · 154 阅读 · 0 评论 -
AcWing 1141. 局域网
题目链接 题意 有n个点,k条边,边权越小,线路就越通畅,要求去掉重边,使剩下的生成树的边权之和最小。 分析 按题目的意思来理解就是两点之间要留下边权最小的一条边,把其他边权较大的边去掉,即答案=全部边权之和 - 最小生成树 从题目的数据范围来看,给出的图应该是稀疏图,因此使用kruskal算法 解决方案 把多余的重边去掉,留下边权最小的边 代码 #include <iostream> #include <cstring> #include <algorithm> us原创 2020-09-16 08:49:29 · 160 阅读 · 0 评论 -
AcWing 859. Kruskal算法求最小生成树
AcWing 859. Kruskal算法求最小生成树 前置问题 Q:什么是生成树呢? A: 在一个图中,由n个点(其实就是所有顶点)和n-1条边所构成的连通子图(结构是一颗树) Q:怎么判断哪些点是在同一个连通块? A:使用并查集就行了,把每个独立的连通块看作是一个集合 思想 Kruskal算法是先把所有边按照边权大小进行排序,得到一个升序的序列,然后遍历每一条边,如果这条边的两个点不是在同一个集合,则选择当前的边权(因为排序过,所以当前边权也是两点之间的最小边权),顺便合并这两个点所在的集合;如果这两原创 2020-09-14 13:48:15 · 141 阅读 · 0 评论 -
AcWing 858. Prim算法求最小生成树
题目链接:AcWing 858. Prim算法求最小生成树 题意 使用prim算法找出包含所有点的却只有n-1条边的无向连通子图, 并求出子图的最小权值。 分析 此题是非常裸的prim算法题,直接套用模板就ok了,但是一定要理解思想是怎样的。 思想 将图分为两个集合,其中一个集合是最小生成树(一开始是空集),另一个集合是不属于最小生成树的点集S,每次都找离最小生成树最近的点,并把这个点加入最小生成树,然后利用刚增加的点去更新 其它点到最小生成树的距离 这里定义一个数组d,d[i]的含义是从点i到集合S的最短原创 2020-09-14 13:08:18 · 202 阅读 · 0 评论