最小生成树
Rancho__
这个作者很懒,什么都没留下…
展开
-
hihoCoder-1097-Prim
这题就是prim的板子题,不过如果用end每次初始化为-1的话,我们就不需要对于每次选中的下一个点进行判断是否选中了,因为每次外层循环第一次进入都是可以的。然后还很 (i=1;i<=n;i++) 正好对应上,因为n个点,n-1条边,跑n-1次就够了,但是我们第一次是让原点进入更新d[ ]数组值的。其实prim和dijkstra还是很像的。#include <cstdio>...原创 2019-02-05 20:19:33 · 128 阅读 · 0 评论 -
HDU-1233-还是畅通工程
Prim的板子题,没啥好讲的。相似题:https://blog.csdn.net/qq_41090676/article/details/86766394可以用来练手。#include &amp;lt;cstdio&amp;gt;#include &amp;lt;cstring&amp;gt;const int INF=0x3f3f3f3f;int map[105][105], d[105], vis[105];原创 2019-02-06 16:19:27 · 93 阅读 · 0 评论 -
HDU-1301-Jungle Roads
这题kruscal跑的好快,嗯,就是一道板子题,很简单。输入的话,输入看着很繁琐,所以就用了cin。#include <iostream>#include <algorithm>using namespace std;struct Edge { int f, t, c; bool operator <(const Edge &a)c...原创 2019-02-15 17:06:08 · 80 阅读 · 0 评论 -
HDU-1102-Constructing Roads
这题就是稠密图,所以我们就用Prim。然后题中要求的是需要新建的路的最小值,所以已经建成的路,我们直接使用就可以了,把它设置为0,然后走这条路就是最短的。这题还是多组输入输出,所以还是用while循环输入。#include <cstdio>int map[105][105];int vis[105], d[105];const int INF = 0x3f3f3f3f;i...原创 2019-02-15 18:01:10 · 84 阅读 · 0 评论 -
hihoCoder-1098-kruskal
如果起始点和终止点的父节点相同,就说明它们就已经在同一个连通分量里面,说明,起始点和终止点在此之前就已经被连入同一个分量之中,如果此时还将起始点和终止点连入此分量,就会形成回路,想象一个三角形,你大概就会明白。这一题就是kruscal的应用,但是我们的find函数还是每次最好把路径压缩一下,不然的话,就会导致查找效率的下降,然后超时。#include <cstdio>#inclu...原创 2019-02-08 15:45:11 · 97 阅读 · 0 评论 -
hihoCoder-1109-堆优化的Prim
优先队列是由堆组成的,所以当我们使用优先队列对Prim进行优化时,就把这种优化叫做堆优化。它的算法核心思想就是每次向后找边,每个pair存的都是下一个点,以及边权。我们对于已经走过的点就避开,这样就不会形成环。因为我们已知的点是标记过的,我们只要下一个点不走已知的点肯定不会形成环路。因为第一个点已经标记过,所以我们之后只用做n-1次,找n-1个点就可以了,顺便找了n-1条边,这时候一颗最小生成...原创 2019-02-10 14:55:07 · 200 阅读 · 0 评论 -
HDU-1863-畅通工程
这题就是kruscal,我们最后判断一下是否连通就行了。直接看pre数组,里面有根节点,超过一个就说明不连通,输出问号就可以了。#include <cstdio>#include <algorithm>using namespace std;int pre[110], res, m, n;struct Edge { int f, t, c; bo...原创 2019-02-13 11:30:24 · 116 阅读 · 0 评论 -
POJ-1258-Agri-Net
这题就是最小生成树Prim,d[]代表的是整个连接集合和未连接点的最小距离。#include <cstdio>int map[105][105];int vis[105], d[105];const int INF = 0x3f3f3f3f;int n,ans;void Prim(){ d[0] = 0; ans = 0; for (int i ...原创 2019-02-13 12:09:57 · 90 阅读 · 0 评论