最小生成树
Masker_43
这个作者很懒,什么都没留下…
展开
-
【I - Agri-Net】
思路:裸的最小生成树邻接矩阵PRIM,没什么好说的。代码:0ms 688kB//0ms 688kB#include <iostream>#include <cstdio>#include <queue>#include <cstring>#define INF 0x3f3f3f3fusing namespace ...原创 2019-07-07 15:41:04 · 201 阅读 · 0 评论 -
【G - Arctic Network】
思路:最小生成树,Kruskal。先分析一波,因为可以任意设置 S 条零花费的道路,那么如果使用单树根的 Prim 恐怕会 WA,应使用以边为本的 Kruskal。一共连 N - S 条边即可,剩下的联通块都使用免费路。枚举所有边,注意枚举严格上三角即可。代码:282ms 2776kB//282ms 2776kB#include <iostream>#i...原创 2019-07-06 23:59:09 · 164 阅读 · 0 评论 -
【F - Truck History】
思路:最小生成树,枚举每两串之间的距离即可。代码:422ms 16188kB//422ms 16188kB#include <iostream>#include <cstring>#include <queue>#include <cstdio>#define INF 0x3f3f3f3fusing namesp...原创 2019-07-06 18:55:03 · 99 阅读 · 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 · 163 阅读 · 0 评论 -
【D - Constructing Roads】
思路:最小生成树,已经建好的路 mp 置零即可。代码:282ms 732kB//282ms 732kB#include <iostream>#include <cstring>#include <queue>#define INF 0x3f3f3f3fusing namespace std;const int maxn =...原创 2019-07-06 15:43:32 · 122 阅读 · 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 · 158 阅读 · 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 · 320 阅读 · 0 评论 -
【A - Jungle Roads】
思路:最小生成树板题。Kruskal(并查集):存储所有边,sort,遍历一遍边即可找出所有应采用的边,因此也可以使用优先队列。不需要 vis[],并查集足矣。Prim(优先队列):类似 Dijkstra,以点态存优先队列,相当于全图最短路,有所不同的是,最短路松弛为 dis[v] = dis[u] + w;最小生成树松弛为 dis[v] = w 。利用 vis[]。可以用邻接表或邻接矩阵...原创 2019-07-06 10:56:21 · 173 阅读 · 0 评论 -
最小生成树
核心:Prim:基于点,类似于 Dijkstra,需要用到优先队列、dis[]、vis[]。Kruskal:基于边,要用到并查集、sort。总结:唯一性:【K - The Unique MST】原创 2019-07-09 17:53:11 · 120 阅读 · 0 评论 -
【N - 畅通工程再续】
思路:最小生成树,Prim。要注意即使是 double,闭区间也是必须写成闭区间的 ( >= )。代码:46ms 1532kB//46ms 1532kB#include <iostream>#include <queue>#include <cstring>#include <cmath>using name...原创 2019-07-09 17:40:59 · 97 阅读 · 0 评论 -
【M - Jungle Roads】
见:A - Jungle Roads 。原创 2019-07-09 16:55:29 · 104 阅读 · 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 · 224 阅读 · 0 评论 -
【K - The Unique MST】
思路:最小生成树的唯一性,做法有两种。多次 Kruskal。第一次 Kruskal 将最小生成树用到的所有边高亮并记录 ans,然后逐一删去某条边再 Kruaskal,若某次结果与 ans相同,则可证明树 not unique。注意可能删去某条边后原图不连通,要加入判断,否则会 WA。优化:因为边数是固定的,所以仅将权值重复且用到的边高亮即可,如果边权唯一则不需删除之(只需要多加一个 sa...原创 2019-07-09 13:26:03 · 749 阅读 · 0 评论 -
【J - Borg Maze】
思路:最小生成树+BFS自己想出来哒,但是数据好坑,输入长宽后有一大堆空格,WA 的好难受。题目很麻烦,依次需要读图,存图,BFS 枚举每两个点之间的最短路径,Prim 求以 S 为根的最小生成树。还用到了两种结构体两个优先队列,分别用于 BFS 和 Prim。可以使用 map 优化查找。我没有写。代码:63ms 792kB//63ms 792kB #include...原创 2019-07-07 18:37:18 · 171 阅读 · 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 · 158 阅读 · 0 评论