随笔分类 -  图论-生成树

摘要:题意: 求出连接各个村庄最小的公路总长度,把最小公路总长度求出来。 思路: 最小生成树原理,带入数据求得。 代码: prim: krusual: 阅读全文
posted @ 2017-10-10 21:20 codeg 阅读(149) 评论(0) 推荐(0)
摘要:题意: 在这些小岛中建设最小花费的桥,但是一座桥的距离必须在10 -- 1000之间。 思路: 用最小生成树解决吧,就那两个算法。 代码: prim #include <iostream> #include <cstdio> #include <cstring> #include <cmath> u 阅读全文
posted @ 2017-10-10 21:13 codeg 阅读(177) 评论(0) 推荐(0)
摘要:题意: 有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离。 思路: 又是一个最小生成树,因为给出了一个二维矩阵代表他们的距离,直接算prim就行了。 代码: 阅读全文
posted @ 2017-10-10 20:15 codeg 阅读(132) 评论(0) 推荐(0)
摘要:题意: 给你N个城市的坐标,城市之间存在公路,但是由于其中一些道路损坏了,需要维修,维修的费用与公路长成正比(公路是直的)。 但现有M条公路是完整的,不需要维修,下面有M行,表示不需要维修的道路两端的城市,问最短费用。 思路: lowcost[i]数组存还未处理的城市i离已经处理过的城市的最短距离, 阅读全文
posted @ 2017-10-10 19:14 codeg 阅读(128) 评论(0) 推荐(0)
摘要:题意: 判断最小生成树是否唯一。 思路: 首先求出最小生成树,记录现在这个最小生成树上所有的边,然后通过取消其中一条边,找到这两点上其他的边形成一棵新的生成树,求其权值,通过枚举所有可能,通过这些权值看与原最小生成树的权值比较看其是否唯一。其实也可以理解成次小生成树加上最大边权的边后是否唯一。 代码 阅读全文
posted @ 2017-10-08 18:44 codeg 阅读(137) 评论(0) 推荐(0)
摘要:题意: 有N个点,有些点已经连接了,然后求出所有点的连接的最短路径是多少。 思路: 最小生成树的变形,有的点已经连接了,就直接把他们的权值赋为0,一样的就做最小生成树。 代码: prime: #include <cstdio> #include <iostream> using namespace 阅读全文
posted @ 2017-10-08 15:46 codeg 阅读(148) 评论(0) 推荐(0)
摘要:题意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小边长总和是多少。 思路: 先处理空间点之间的距离,要注意的是两个球面相交的情况,相交的话距离是0。两球面距离是球心距离减去两个球的半径(边权 = A 阅读全文
posted @ 2017-10-08 12:58 codeg 阅读(182) 评论(0) 推荐(0)
摘要:题意: 给出n个节点,再有m条边,这m条边代表从a节点到b节点电缆的长度,现在要你将所有节点都连起来,并且使长度最小 思路: 这是个标准的最小生成树的问题,用prim的时候需要注意的是他有重边,取边最小的那条加入图里就可以了,但是kruskal可以忽略这个问题 代码: prim: #include 阅读全文
posted @ 2017-10-07 21:43 codeg 阅读(249) 评论(0) 推荐(0)
摘要:题意: 首先给你一个图,需要你求出最小生成树,首先输入n个节点,用大写字母表示各节点,接着说有几个点和它相连,然后给出节点与节点之间的权值。拿第二个样例举例:比如有3个节点,然后接下来有3-1行表示了边的情况,拿第一行来说:A 2 B 10 C 40表示A有2个邻点,B和C,AB权值是10,AC权值 阅读全文
posted @ 2017-10-07 17:43 codeg 阅读(174) 评论(0) 推荐(0)