因为牛客多校我第一次见到这个算法:算法大致过程就是因为牛客多校我第一次见到这个算法: 算法大致过程就是因为牛客多校我第一次见到这个算法:算法大致过程就是
对于每个连通块,每次找出一条最小的出边
然后把两个连通块合并
每次可以是连通块个数减半
然后就得到了一个O((n+m)log n)的做法


代码模板:

#include <iostream>
#include <cstdio>
#include <stack>
#include <sstream>
#include <limits.h>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <cmath>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <set>
// #define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define hash Hash
#define next Next
#define count Count
#define pb push_back
#define f first
#define s second
using namespace std;
const int N = 4e5+10, mod = 1e9 + 9;
const long double eps = 1e-5;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
struct node {int to, next, w;
}e[N], mi[N];
int fa[N];
int head[N], cnt;
int n,m;
inline int find(int x)
{return fa[x] == x ? x : fa[x] = find(fa[x]);
}inline void add(int from, int to, int w)
{e[cnt] = {to,head[from],w};head[from] = cnt ++;
}inline int Borucka()
{int ans = 0, edg = 0;while(1){ms(mi,INF);for(int i = 1; i <= n; ++ i)for(int j = head[i]; ~j; j = e[j].next){int v = e[j].to, w = e[j].w;if(find(v) != find(i) && w < mi[find(i)].w){mi[find(i)].w = w, mi[find(i)].to = v;}}int F = 0;for(int i = 1; i <= n; ++ i){int v = mi[i].to, w = mi[i].w;if(mi[i].to != mi[0].to && find(i) != find(v)) fa[find(v)] = find(i), ans += w, edg ++, F = 1;}if(!F) break;}if(edg == n - 1) return ans;else return -1;
}int main()
{read(n,m);ms(head,-1);for(int i = 0; i <= n + 1; ++ i) fa[i] = i;for(int i = 0; i < m; ++ i){int l, r, w;read(l,r,w);add(l,r,w);add(r,l,w);}int ans = Borucka();if(ans == -1) cout << "orz";else cout << ans << endl;
}

Boruvka求最小生成树相关推荐

  1. Prim算法和Kruskal算法求最小生成树

    Prim算法 连通分量是指图的一个子图,子图中任意两个顶点之间都是可达的.最小生成树是连通图的一个连通分量,且所有边的权值和最小. 最小生成树中,一个顶点最多与两个顶点邻接:若连通图有n个顶点,则最小 ...

  2. CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树

    题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...

  3. prim算法求最小生成树_克鲁斯卡尔算法(Kruskal算法)求最小生成树

    上一节介绍了求最小生成树之普里姆算法.该算法从顶点的角度为出发点,时间复杂度为O(n2),更适合与解决边的绸密度更高的连通网.本节所介绍的克鲁斯卡尔算法,从边的角度求网的最小生成树,时间复杂度为O(e ...

  4. C语言Prims求最小生成树MST的算法(附完整源码)

    C语言Prims求最小生成树MST的算法 C语言Prims求最小生成树MST的算法完整源码(定义,实现,main函数测试) C语言Prims求最小生成树MST的算法完整源码(定义,实现,main函数测 ...

  5. C语言实现克鲁斯卡尔Kruskal算法求最小生成树(附完整源码)

    Kruskal算法求最小生成树 Edge结构体,Graph结构体 Kruskal算法求最小生成树完整源码(定义,实现,main函数测试) Edge结构体,Graph结构体 // a structure ...

  6. prim算法求最小生成树_最小生成树的两种方法(Kruskal算法和Prim算法)

    关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...

  7. HDU 1301 - Jungle Roads( Prim求最小生成树 )

    题意 给出n个编号为A~A+n的节点,和某些节点之间的距离,求最小生成树的总权值 思路 裸的Prim算法求最小生成树 算法细节: 最小生成树-Prim算法和Kruskal算法 AC代码 #includ ...

  8. 离散实验一 油管铺设 (求最小生成树的Prim算法的实际应用)

    实验一 油管铺设 2018.11.06于CSDN释放 详见GitHub: https://github.com/DolorHunter/PrimAlgorithm 实验准备 最小生成树问题,求最小生成 ...

  9. 【老生谈算法】matlab实现Kruskal避圈算法求最小生成树——Kruskal避圈算法

    基于MATLAB的Kruskal避圈算法求最小生成树 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于MATLAB的Kruskal避 ...

最新文章

  1. 软件版本具体代表什么意思
  2. cocos2dx游戏--欢欢英雄传说--添加游戏背景
  3. resnet50加入fpn_FPN+SSD同时兼顾速度和精度的检测器(二)
  4. 日志服务数据加工最佳实践: 从其他logstore拉取数据做富化
  5. python接口自动化(四十一)- 发xml格式参数的post请求(超详解)
  6. identifier is too long 异常处理
  7. 站点页面Service Unavailable 503的一种解决方法
  8. Python 路径问题--No such file or directory
  9. wacom数位板怎么调压感_手绘板压感是什么 数位板压感怎么调【教程】
  10. 201015.阅读和了解什么是形式化方法
  11. 【物联网设计记录】基于机智云云平台的Wi-Fi控制开发板
  12. windows10系统更新后,Windows.old 无法删除解决方法
  13. 跟着团子学SAP EPPM: CPM主要底表
  14. 大话设计模式 第二十三章 命令模式 考羊肉串
  15. NLP深入学习——什么是词向量和句向量(Word Embedding and Sentence Embedding)
  16. 给input[text]添加icon,并且绑定事件
  17. 192.168.8.1手机登陆_手机怎么登陆192.168.8.1设置路由器(2
  18. java-php-python-ssmX钢材商贸公司网络购销管理系统计算机毕业设计
  19. 我为什么选择超级IP名片
  20. difference用法

热门文章

  1. 记录一些user-agent
  2. 难以置信的目标检测小妙招:多训练几个epochs,平均一下就能获得更好的模型...
  3. 如何保证工业相机工作的精准与稳定?
  4. 多目标跟踪(MOT)入门
  5. 交换机工作原理、MAC地址表、路由器工作原理详解
  6. 内网对时服务 ntp 平滑更改
  7. (三)AJAX基本介绍和简单实例03
  8. 【Joomla】TinyMCE - Add custom styles
  9. 文件查找命令find的使用
  10. .NET :如何对数组进行排序