最小生成树kruskal模板
算法思路:每次选取权值最小的边,判断这两个点是否在同一个集合内,如果在则跳过,如果不在则加上这条边的权值
可以使用并查集储存结点,可以快速判断结点是否在同一集合内。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<queue>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
map<ll,ll> mp;
const int maxn=1e5+;//边数
struct edg{
int u;
int v;
int w;
bool operator < (const edg e)
const{
return w<e.w;
}
}st[maxn];
int fa[maxn];//并查集
int cnt;//边数
void addedg(int u,int v,int w){
st[cnt].u=u;
st[cnt].v=v;
st[cnt++].w=w;
}
int find(int i){
if(fa[i]==-)
return i;
else
return find(fa[i]);
}
int kruskal(int n){
sort(st,st+cnt);
memset(fa,-,sizeof(fa));
int u,v;
int ans=,count=;
int f1,f2;
for(int i=;i<cnt;i++){
u=st[i].u;
v=st[i].v;
f1=find(u);
f2=find(v);
if(f1!=f2){
fa[f1]=f2;
ans+=st[i].w;
count++;
}
}
if(count==n-){
return ans;
}
else{
return -;
}
}
int main(){
int n,m;
int u,v,w;
int ans;
cin>>n>>m;//点,边的数量
cnt=;
for(int i=;i<m;i++){
cin>>u>>v>>w;
addedg(u,v,w);
}
ans=kruskal(n);
if(ans==-){
cout<<"该图没有连通"<<endl;
}
else{
cout<<ans<<endl;
}
return ;
}
最小生成树kruskal模板的更多相关文章
- 模板——最小生成树kruskal算法+并查集数据结构
并查集:找祖先并更新,注意路径压缩,不然会时间复杂度巨大导致出错/超时 合并:(我的祖先是的你的祖先的父亲) 找父亲:(初始化祖先是自己的,自己就是祖先) 查询:(我们是不是同一祖先) 路径压缩:(每 ...
- Kruskal模板
Kruskal模板 struct Edge { int from,to,v; }edge[maxn*10]; int fa[maxn]; int n,m; int find(int x) { retu ...
- 最小生成树——Kruskal与Prim算法
最小生成树——Kruskal与Prim算法 序: 首先: 啥是最小生成树??? 咳咳... 如图: 在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树.这就叫“生成树”.(如下图) 每个 ...
- 【转】最小生成树——Kruskal算法
[转]最小生成树--Kruskal算法 标签(空格分隔): 算法 本文是转载,原文在最小生成树-Prim算法和Kruskal算法,因为复试的时候只用到Kruskal算法即可,故这里不再涉及Prim算法 ...
- 最小生成树kruskal 知识点讲解+模板
0.前言 因为本人太蒟了 我现在连NOIP的初赛都在胆战心惊 并且我甚至连最小生成树都没有学过 所以这一篇博客一定是最详细的QAQ 哈哈 请您认真看完如果有疏漏之处敬请留言指正 感谢! Thanks♪ ...
- 最小生成树(模板 Kruskal)
Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达 ...
- 最小生成树prim和kruskal模板
prim: int cost[MAX_V][MAX_V]; //cost[u][v]表示边e=(u,v)的权值(不存在的情况下设为INF) int mincost[MAX_V]; //从集合X出发的每 ...
- 859. Kruskal算法求最小生成树(模板)
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数. 求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible. 给定一张边带权的无向图G=(V, E),其中V表示 ...
- 【模板】最小生成树Kruskal
洛谷3366 #include<cstdio> #include<algorithm> using namespace std; ,maxm=; ,ans=; struct e ...
随机推荐
- table布局与div布局
DIV与TABLE本身并不存在什么优缺点,所谓web标准只是推荐的是正确的使用标签,好比说:DIV用于布局,而TABLE则本来就是转二维数据的.让TABLE做该做的事,并不是说页面里不出现TABL ...
- ReentrantLock 学习笔记
有篇写的很不错的博客:https://blog.csdn.net/aesop_wubo/article/details/7555956 基于JDK1.8 参考着看源码 ,弄清楚lock()和un ...
- eclipse中导入java类失败的问题
在 Eclips 开发时,新建了一个 Dynamic Web Project,在运行jsp文件时tomcat报错: org.apache.jasper.JasperException: Unable ...
- kbengine:简单介绍
之前想分析一个开源服务器很久了,思前想后,还是选择了kbengine. KBEngine的服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新).现在服务器大多数是用C++做的,pyt ...
- 健康检测文件httpchk.jsp
静态显示: <html><body><center> Now time is: <%=new java.util.Date()%> </cente ...
- Idiom: a Lot on my Plate
Idiom: a Lot on my Plate Share Tweet Share Tagged With: Idioms I’ve got a lot on my plate. American ...
- How to Pronounce We’ll Contraction
How to Pronounce We’ll Contraction Share Tweet Share Tagged With: WILL Contractions There are severa ...
- C# 图像处理:获取鼠标位置信息(全局)
Point ms = Control.MousePosition; //获取鼠标位置 this.label2.Text = string.Format("{0}:{1}", ms. ...
- Swift 2.0学习笔记(Day 16)——字典集合
Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成 ...
- MySQL C#连接ySQL保存当前时间,时分秒都是0,只有日期
原因:MySQL的字段格式是:date 解决: 1.把 字段格式 改为 datetime 2.映射 的字段类型 也要改为 datetime