题目大意: 给你一堆三维的点,每个点之间的距离是xy轴的欧式距离,代价是高度,问一颗最优比例生成树。这题是我很早之前做过的了,当初还非常非常菜,给大家看一下我的情况。 当初可真是年少无知啊,这个prim因为是稠密图,所以n方才能求生成树,很神奇啊,稠密图的最小生成树算法居然是o(e)的,不过还是很慢 ...
分类:
其他好文 时间:
2020-05-04 15:20:44
阅读次数:
77
题意: 给你一张 n 个点的完全图,其中有 m 条边长度为 1,其余全为 0。问你这张图的最小生成树为多少。 题解: 就是求补图的连通块数量减一,可以用set的count函数来建立补图,具体看代码。 #include<bits/stdc++.h> using namespace std; const ...
分类:
其他好文 时间:
2020-05-02 12:03:40
阅读次数:
55
接上文,研究了一下算法之后,发现大话数据结构的代码风格更适合与前文中邻接矩阵的定义相关联,所以硬着头皮把大话中的最小生成树用自己的话整理了一下,希望大家能够看懂。 一、最小生成树 1,问题 最小生成树要解决的是带权图 即 网 结构的问题,就是n个顶点,用n-1条边把一个连通图连接起来,并且使得权值的 ...
分类:
编程语言 时间:
2019-12-18 14:37:54
阅读次数:
91
Description "题库链接" 给你一张 $n$ 个点的完全图,其中有 $m$ 条边长度为 $1$,其余全为 $0$。问你这张图的最小生成树为多少。 $1\leq n\leq 100000,0 \leq m \leq \min\left(\frac{n(n 1)}{2},10^5\right) ...
分类:
其他好文 时间:
2019-11-09 00:43:08
阅读次数:
195
先求一下原图的最小生成树,把不在最小生成树里的边全部删掉。 Mr.Greedy 的边会替换掉若干最小生成树上的边。 一个暴力做法是,先 $2 ^ k$ 枚举哪些边一定在最小生成树中,把他们加入最小生成树。然后从小到达枚举原图上的边。如果能加入就直接加入,否则就会出现一个环,那么这个环上所有 Mr.G ...
介绍:Kruskal算法是用来求加权连通图的最小生成树的一种算法。 对于一个图来说,我们可以选择不同的边而产生不同的树,由于边的选择不一样,每一条边的权值不一样,那我们最后生成出来的树的权值也就不一样,Kruskal算法就是来找怎样选择边才可以使产生的树的权值最小。 思路:现在有一个集合Q,来表示图 ...
分类:
编程语言 时间:
2019-11-03 20:22:54
阅读次数:
68
次小生成树 http://poj.org/problem?id=1679 不难得出,次小生成树可以由最小生成树更换一条边得到。 首先构造原图的最小生成树,然后枚举每一条不在最小生成树中的边 (u, v, w),尝试将这条边加入生成树,因为直接加入边会产生环,所以我们需要在加边之前删去最小生成树上 u ...
分类:
其他好文 时间:
2019-10-13 01:05:12
阅读次数:
118
题目链接 这道题一看最小值最大,很容易被误导进二分答案的思路,但实际上并不需要二分答案。 其实正解是最小生成树,我们先预处理出原图的最小生成树,因为要分k个部落,所以我们先把最小的n-k边先全部选走。因为我们用kruskal的话要用到并查集,这样我们就可以判断他们是否在同一部落中。然后我们再枚举剩下 ...
分类:
Web程序 时间:
2019-10-06 20:54:07
阅读次数:
111
最小树形图 个人理解就是求指定起点的有向图的最小生成树。 算法的大概步骤如下: 1. 遍历所有边,求得一步到达点v的距离in[v]和前驱pre[v].(若除根节点外有的点不可以被到达则无解) 2. 遍历所有点v,ans+in[v] (相当于从离v最近的点走到了v),看其是否在环上(一直跑pre,能跑 ...
分类:
其他好文 时间:
2019-10-06 16:43:33
阅读次数:
92
1. 最小生成树定义 树是指没有环路的图,生成树就是指一个图上面删除一些边,使它没有环路。 最小生成树就是指生成树中边权之和最小的那一种。 上图的最小生成树就是这样: 2. Prim 算法 2.1. 算法流程 就以上图为例: 1. 先选择一个起始点,我们就以A为例。 2. 创建一个集合S,用来存储已 ...
分类:
编程语言 时间:
2019-10-04 15:22:13
阅读次数:
107