洛谷P3366 【模板】最小生成树(Boruvka算法)
题意
Sol
自己yy着写了一下Boruvka算法。
算法思想很简单,就是每次贪心的用两个联通块之间最小的边去合并。
复杂度\(O(n \log n)\),然鹅没有Kruskal跑的快,但是好像在一类生成树问题上很有用
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define fi first
#define se second
#define pb push_back
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
char buf[(1 << 22)], *p1 = buf, *p2 = buf;
using namespace std;
const int MAXN = 5001;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N, M;
namespace DSU {
	int fa[MAXN], siz[MAXN];
	void init(int N) {
		for(int i = 1; i <= N; i++) fa[i] = i, siz[i] = 1;
	}
	int find(int x) {
		return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);
	}
	void unionn(int x, int y) {
		int fx = find(x), fy = find(y);
		if(siz[fx] > siz[fy]) swap(fx, fy);
		fa[fx] = fy; siz[fy] += siz[fx];
	}
};
using namespace DSU;
vector<Pair> v[MAXN];
int link[MAXN], val[MAXN];
void Boruvka() {
	init(N); int ans = 0;
	bool flag;
	do {
		flag = 0;
		memset(link, -1, sizeof(link));
		memset(val, 0x3f, sizeof(val));
		for(int x = 1; x <= N; x++) {
			int fx = find(x);
			for(auto &tmp : v[x]) {
				int to = tmp.fi, w = tmp.se, fy = find(to);
				if(fx == fy || (w > val[fx])) continue;
				link[fx] = fy; val[fx] = w;
			}
		}
		for(int x = 1; x <= N; x++) {
			int fx = find(x);
			if((~link[fx]) && find(fx) != find(link[fx]))
				unionn(fx, link[fx]), ans += val[fx], flag = 1;
		}
	}while(flag);
	int f1 = find(1);
	for(int i = 2; i <= N; i++) if(find(i) != f1) return (void) puts("orz");
	cout << ans;
}
signed main() {
	N = read(); M = read();
	for(int i = 1; i <= M; i++) {
		int x = read(), y = read(), w = read();
		v[x].push_back({y, w});
		v[y].push_back({x, w});
	}
	Boruvka();
}
												
											洛谷P3366 【模板】最小生成树(Boruvka算法)的更多相关文章
- [洛谷P3366] [模板] 最小生成树
		
存个模板,顺便复习一下kruskal和prim. 题目传送门 kruskal 稀疏图上表现更优. 设点数为n,边数为m. 复杂度:O(mlogm). 先对所有边按照边权排序,初始化并查集的信息. 然后 ...
 - 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题
		
链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...
 - 最小生成树 & 洛谷P3366【模板】最小生成树 & 洛谷P2820 局域网
		
嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...
 - 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
		
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
 - 洛谷P3375 [模板]KMP字符串匹配
		
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...
 - LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
		
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...
 - 【AC自动机】洛谷三道模板题
		
[题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...
 - 洛谷-P5357-【模板】AC自动机(二次加强版)
		
题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但 ...
 - 洛谷P1119-灾后重建-floyd算法
		
洛谷P1119-灾后重建 题目描述 给出\(B\)地区的村庄数NN,村庄编号从\(0\)到\(N-1\),和所有\(M\)条公路的长度,公路是双向的. 给出第\(i\)个村庄重建完成的时间\(t_i\ ...
 
随机推荐
- 代码转换为html显示
			
需要将代码转换为 html 使其显示好看一些,可以在这里进行装换: https://tohtml.com/ http://hilite.me/
 - 十问 JVM
			
今天我们来讨论下 Java 虚拟机,通过一系列常见的问题来逐渐深入了解 JVM 创建对象过程,内存布局,类加载以及 GC 回收算法等机制. 十问 JVM 问题整理: Java虚拟机创建对象的过程 (使 ...
 - Nginx技术进阶详讲
			
Nginx技术进阶详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 并发数问题 讲到并发数这个概念,想必各位应该都知道是什么意思,就是同时访问一个项目,就比我们现在做的一些项目完 ...
 - 从零开始学TensorFlow
			
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近在学习TensorFlow的相关知识,了解了Te ...
 - 邀您参加 | BigData & Alluxio 交流会-成都站
			
4月27日,在天府之国,与你共享大数据与Alluxio的技术魅力. 活动介绍 本期技术沙龙将会聚焦在大数据.存储.数据库以及Alluxio应用实践等领域,邀请腾讯技术专家和业界技术专家现场分享关于Al ...
 - iftop命令使用范例
			
iftop 介绍 iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能.必须以root身份才能运行. 实例 默认是监控第一块网卡的流量 iftop 监控eth1 iftop - ...
 - HTML基础系列
			
HTML标记语言,网页制作的第一步. 什么是HTML呢?查百度 基础语法 常用标签 HTML是超文本标记语言,HTML不用编译,直接在浏览器中执行,HTML是一个文本文件. HTML基本结构,标签,元 ...
 - cesium 之图层管理器篇(附源码下载)
			
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
 - DataPipeline联合Confluent Kafka Meetup上海站
			
Confluent作为国际数据“流”处理技术领先者,提供实时数据处理解决方案,在市场上拥有大量企业客户,帮助企业轻松访问各类数据.DataPipeline作为国内首家原生支持Kafka解决方案的“iP ...
 - #ifndef, #define, #endif 作用
			
#ifndef, #define, #endif 作用 https://www.cnblogs.com/challenger-vip/p/3386819.html