
最小生成树
Masker_43
这个作者很懒,什么都没留下…
展开
-
【I - Agri-Net】
思路: 裸的最小生成树邻接矩阵PRIM,没什么好说的。 代码: 0ms 688kB //0ms 688kB #include <iostream> #include <cstdio> #include <queue> #include <cstring> #define INF 0x3f3f3f3f using namespace ...原创 2019-07-07 15:41:04 · 230 阅读 · 0 评论 -
【G - Arctic Network】
思路: 最小生成树,Kruskal。 先分析一波,因为可以任意设置 S 条零花费的道路,那么如果使用单树根的 Prim 恐怕会 WA,应使用以边为本的 Kruskal。一共连 N - S 条边即可,剩下的联通块都使用免费路。 枚举所有边,注意枚举严格上三角即可。 代码: 282ms 2776kB //282ms 2776kB #include <iostream> #i...原创 2019-07-06 23:59:09 · 192 阅读 · 0 评论 -
【F - Truck History】
思路: 最小生成树,枚举每两串之间的距离即可。 代码: 422ms 16188kB //422ms 16188kB #include <iostream> #include <cstring> #include <queue> #include <cstdio> #define INF 0x3f3f3f3f using namesp...原创 2019-07-06 18:55:03 · 126 阅读 · 0 评论 -
【E - QS Network】
思路: 最小生成树,唯一特殊在于 mp[i][j] = w + p[i] + p[j] 。 代码: 60ms 4244kB //60ms 4244kB #include <iostream> #include <cstring> #include <cstdio> #include <queue> #define INF 0x3f3f...原创 2019-07-06 16:09:50 · 205 阅读 · 0 评论 -
【D - Constructing Roads】
思路: 最小生成树,已经建好的路 mp 置零即可。 代码: 282ms 732kB //282ms 732kB #include <iostream> #include <cstring> #include <queue> #define INF 0x3f3f3f3f using namespace std; const int maxn =...原创 2019-07-06 15:43:32 · 144 阅读 · 0 评论 -
【C - Building a Space Station】
思路: 最小生成树,PRIM 。 存储所有点,邻接矩阵存图。 除了松弛没什么特殊的了。 代码: 188ms 1028kB //188ms 1028kB #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <cst...原创 2019-07-06 14:27:04 · 191 阅读 · 0 评论 -
【B - Networking】
思路: 最小生成树,点很少,边无界,Prim,邻接矩阵。 代码: 16ms 708kB //16ms 708kB #include <iostream> #include <cstring> #include <queue> #include <cstdio> #include <algorithm> #define IN...原创 2019-07-06 12:39:19 · 366 阅读 · 0 评论 -
【A - Jungle Roads】
思路: 最小生成树板题。 Kruskal(并查集):存储所有边,sort,遍历一遍边即可找出所有应采用的边,因此也可以使用优先队列。不需要 vis[],并查集足矣。 Prim(优先队列):类似 Dijkstra,以点态存优先队列,相当于全图最短路,有所不同的是,最短路松弛为 dis[v] = dis[u] + w;最小生成树松弛为 dis[v] = w 。利用 vis[]。可以用邻接表或邻接矩阵...原创 2019-07-06 10:56:21 · 207 阅读 · 0 评论 -
最小生成树
核心: Prim:基于点,类似于 Dijkstra,需要用到优先队列、dis[]、vis[]。 Kruskal:基于边,要用到并查集、sort。 总结: 唯一性:【K - The Unique MST】原创 2019-07-09 17:53:11 · 170 阅读 · 0 评论 -
【N - 畅通工程再续】
思路: 最小生成树,Prim。要注意即使是 double,闭区间也是必须写成闭区间的 ( >= )。 代码: 46ms 1532kB //46ms 1532kB #include <iostream> #include <queue> #include <cstring> #include <cmath> using name...原创 2019-07-09 17:40:59 · 135 阅读 · 0 评论 -
【M - Jungle Roads】
见:A - Jungle Roads 。原创 2019-07-09 16:55:29 · 129 阅读 · 0 评论 -
【L - 还是畅通工程】
思路: 最小生成树裸题,稠密图,比较一下 Prim & Kruskal 。 Prim:不需要离线做存储边,使用邻接矩阵存储边权即可,用到 Q(NODE)、dis[]、vis[] 。注意初始化、对角线、对称性、单边性。 代码: Prim核心:只需要询问新加入点的直连边即可 for(int i=1;i<=N;i++) if(!vis[i] && dis...原创 2019-07-09 16:24:43 · 255 阅读 · 0 评论 -
【K - The Unique MST】
思路: 最小生成树的唯一性,做法有两种。 多次 Kruskal。第一次 Kruskal 将最小生成树用到的所有边高亮并记录 ans,然后逐一删去某条边再 Kruaskal,若某次结果与 ans相同,则可证明树 not unique。注意可能删去某条边后原图不连通,要加入判断,否则会 WA。优化:因为边数是固定的,所以仅将权值重复且用到的边高亮即可,如果边权唯一则不需删除之(只需要多加一个 sa...原创 2019-07-09 13:26:03 · 788 阅读 · 0 评论 -
【J - Borg Maze】
思路: 最小生成树+BFS 自己想出来哒,但是数据好坑,输入长宽后有一大堆空格,WA 的好难受。 题目很麻烦,依次需要读图,存图,BFS 枚举每两个点之间的最短路径,Prim 求以 S 为根的最小生成树。还用到了两种结构体两个优先队列,分别用于 BFS 和 Prim。 可以使用 map 优化查找。我没有写。 代码: 63ms 792kB //63ms 792kB #include...原创 2019-07-07 18:37:18 · 201 阅读 · 0 评论 -
【H - Highways】
思路: 最小生成树。 使用 Kruskal 不停 MLE,改成 Prim 才过掉。 另有诡异之处,见代码。 代码: Kruskal:MLE #include <iostream> #include <cstring> #include <queue> #include <algorithm> using namespace std; co...原创 2019-07-07 14:25:28 · 189 阅读 · 0 评论