最短路/最小生成树
拔光祖国小草
存放一下做的题。
展开
-
最小生成树kruskal
离散里学过原理了,就是避圈法,将边排序,不断选取最小的,并且不能形成圈(这个就是用并查集来判断)直至全部选完。 自己手写了个代码,差不多就是白书上的,没有检查正确性 const int maxn = 100000 + 5; const int inf = 0x3f3f3f3f; int rank[maxn]; int fa[maxn]; int V;//顶点数 void init() {原创 2017-06-29 10:38:20 · 193 阅读 · 0 评论 -
天梯赛补题 - 最小生成树的唯一性
跑出最小生成树后,记录MST中的每条边,然后枚举MST中的每条边,再跑n-1次MST,如果新的MST大小和原来的一样并且 MST边数要为n-1,那么则不唯一 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <str...原创 2018-03-19 20:59:06 · 232 阅读 · 0 评论 -
UVA1151 (MST + 剪枝)
主要是剪枝不好想吧 先跑一遍原图的MST,那么二进制枚举所有的套餐,相当于加进去一些长度为0的边,那么之前原图跑出选中的边就相当于往后挪了,(克鲁斯卡尔按边权值排序)那么再选n-1条边的时候一定不会选到之前没选到的边(大大剪枝了)那么久一定是在原图MST中的n-1条边选(再怎么样选这n-1条边也能得出一个MST) #include <iostream> #include &...原创 2018-03-26 21:15:45 · 471 阅读 · 0 评论