博客
关于我
最小生成树 (kruskal)
阅读量:330 次
发布时间:2019-03-04

本文共 1309 字,大约阅读时间需要 4 分钟。

最小生成树 (kruskal)

#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<bitset>#include<cassert>#include<cctype>#include<cmath>#include<cstdlib>#include<ctime>#include<deque>#include<iomanip>#include<list>#include<map>#include<queue>#include<set>#include<stack>#include<vector>#include<unordered_set>#include<unordered_map>using namespace std;//extern "C"{void *__dso_handle=0;}typedef long long ll;typedef long double ld;#define fi first#define se second#define pb push_back#define mp make_pair#define pii pair<int,int>#define lowbit(x) x&-xconst double PI=acos(-1.0);const double eps=1e-6;const ll mod=1e9+7;const int inf=0x3f3f3f3f;const int maxn=1e5+10;const int maxm=100+10;#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int r[maxn],f[maxn],n,m;int u[maxn],v[maxn],d[maxn];int find(int x) {    return f[x]==x?x:find(f[x]);}int cmp(int i,int j) {    return d[i]<d[j]; }int kruskal(){   	int ans=0;	for(int i=0;i<n;i++) f[i]=i;	for(int i=0;i<m;i++) r[i]=i;	sort(r,r+m,cmp);	for(int i=0;i<m;i++)	{   		int x=find(u[r[i]]);		int y=find(v[r[i]]);		if(x!=y) {    ans+=d[r[i]]; f[x]=y; }	}	return ans;}int main(){   		scanf("%d%d",&n,&m);	for(int i=0;i<m;i++) scanf("%d%d%d",&u[i],&v[i],&d[i]);	printf("%d\n",kruskal());}//5 6//1 2 1//1 3 2//1 4 3//2 5 4//3 5 5//4 5 6//10

转载地址:http://jqmh.baihongyu.com/

你可能感兴趣的文章
MySQL锁机制
查看>>
Java 设置PDF文档浏览偏好
查看>>
Go 数组&切片
查看>>
Go 文件操作
查看>>
老Python总结的字典相关知识
查看>>
vue 不常见操作
查看>>
jQuery的事件绑定与触发 - 学习笔记
查看>>
Python处理接口测试的签名
查看>>
测试流程规范--测试报告模板
查看>>
Linux上TCP的几个内核参数调优
查看>>
解Bug之路-dubbo流量上线时的非平滑问题
查看>>
记一次讲故事机器人的开发-我有故事,让机器人来读
查看>>
高德算法工程一体化实践和思考
查看>>
重温网络编程——常识(三)
查看>>
判断一个数是否是2的幂
查看>>
js 闭包(新)
查看>>
vscode 编辑python 如何格式化
查看>>
seo 回忆录百度基本概念(一)
查看>>
重新整理数据结构与算法(c#)—— 算法套路二分法[二十四]
查看>>
kettle 执行 kjb 临时文件夹 /tmp permission denied 问题
查看>>