技术标签: 最小生成树 【并查集/欧拉路/最小生成树】 kruskal
关于Kruskal算法,这里有一篇博客:最小生成树之Kruskal算法,我总结一下重点:
这是最小生成树的另一种算法,要求总长度之和最短,那么先把图的路径的权值从小到大排列一下,最终连成n-1条边。按照排列好的顺序依次连线,在连线的过程中可能遇到有些点已经联通了,这时我们需要用上并查集来判断两个顶点是否已经连通。
给一组测试数据:
输入:
6 9
2 4 11
3 5 13
4 6 3
5 6 4
2 3 6
4 5 7
1 2 1
3 4 9
1 3 2
输出:
19
代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <string>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define N 100+20
#define M 100000+20
#define MOD 1000000000+7
#define inf 0x3f3f3f3f
using namespace std;
struct node
{
int u;
int v;
int w;
} map[10];
int n,m;
int f[7]= {0},sum=0,cnt=0; //并查集用
int getf(int v)//并查集查找祖先
{
if(f[v]==v)
return v;
else
{
//路径压缩
f[v]=getf(f[v]);
return f[v];
}
}
//并查集合并两个子集
int mix(int v,int u)
{
int t1,t2;
t1=getf(v);
t2=getf(u);
if(t1!=t2)//判断两个点是否在同一个集合中
{
f[t2]=t1;
return 1;
}
return 0;
}
bool cmp(node x,node y)
{
return x.w<y.w;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=m; i++)
scanf("%d%d%d",&map[i].u,&map[i].v,&map[i].w);
sort(map+1,map+m+1,cmp);
//并查集初始化
for(int i=1; i<=n; i++)
f[i]=i;
//克鲁斯卡尔(Kruskal)算法的核心内容
for(int i=1; i<=m; i++) //从小到大枚举边
{
//判断一条边的两个顶点是否联通,就是判断是否在同一个集合中
if(mix(map[i].u,map[i].v))//没有连通的话就选用这条边
{
cnt++;
sum+=map[i].w;
}
if(cnt==n-1)//选了n-1条边后退出循环
break;
}
printf("%d",sum);
return 0;
}
现在是介绍思科网络操作系统的时候了,Cisco Internetwork OperatingSystem简称IOS,它在思科的路由器和交换机上运行,它还能让你在上面执行配置操作。在本章你将能够学习到怎样通过初始安装模式和Cisco IOS command-line interface (CLI)来配置思科的路由器。这里是一些本章我们要达到的目标:·关于IOS的介绍和配置·连接一个路由器·启动路由器
最近看到很多抱怨贴,也许有一定的道理,但是你想过没,为什么大部分.NET程序员工资相对低?我个人是这么看的:大批半罐子水的程序员,永远被局限在.NET的原始的小圈圈里。前端不会(你放弃了一项很重要的技术),SQL写不好(那估计你的业务能力也就一般,项目管理或者业务方面看来发展前景不大好),Linq也用不来(看来你连.NET的东西都没玩好,而且你错过了一个开发效率极高的东东),Sh...
一、先安装好需要的东西go get github.com/go-xorm/cmd/xorm安装驱动版本,选择自己需要用的go get github.com/go-sql-driver/mysql //Mysqlgo get github.com/ziutek/mymysql/godrv //MyMysqlgo get github.com/lib/pq //Postgresgo get gi...
以为这个错误,耽误了我期末复习的时间。出现这个现状是因为双显卡驱动不兼容导致的。Nouveau 是一个开源的显卡驱动,它会影响NUIDIA驱动的安装跳过运行nouveau 驱动就可以了这里是实际操作:在引导界面按e进行编辑,出现上图(上图来自:https://blog.csdn.net/qq_36629313/article/details/79980763)在quiet 后面加上nouveau....
是一种支持多主机多从机的半双工 、同步、串行、低速通讯方式。多用于芯片间通讯。I²C全称叫 Inter-Integrated Circuit,字面上的意思是集成电路之间,它其实是I²C Bus简称。
--------------------android培训、java培训、期待与您交流! --------------------j2ee,j2se,j2me (中2的意思是版本2.0),5.0之后更名为JAVAEE,JAVASE,JAVAME, java的版本1.0/ 1.1 / 1.2 / 1.3 / 1.4 / 5.0 /6.0/*2012年4月30日19:42:32hell
在unity制作2D游戏的教程,背景图sprite铺满显示时Camaer的Size调到多少合适,作个笔记。资源参数background.png 2048x640,Sprite的像素单位:100调节camera.size当camera的size=5,背景的显示效果Camera的Size=3.2的背景的显示效果 计算公式 计算公式为:Screen Heigh...
1 什么是Apache POI2 Apache POI的组件3 安装Apache POI4 使用POI操作Word文档1 什么是Apache POI全称Apache POI,使用Java编写的免费开源的跨平台的Java API。 是创建和维护操作各种符合 Office Open XML(OOXML)标准和微软的 OLE 2 复合文档格式(OLE2)的 Java API。用它可以使用 Java 读...
手机端由原生切换为H5,定位不到元素。需要将apk开启调试模式:在入口Activity中添加2行代码,如下if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {WebView.setWebContentsDebuggingEnabled(true);}效果如下:protected void onCreate(Bundle saved...
1第一章1-1什么是软件危机?是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。1-3什么是软件工程?是指导计算机软件开发和维护的一门工程学科。1-4简述结构化范型和面向对象范型的要点,并分析它们的优缺点。目前使用得最广泛的软件工程方法学(2种):1.传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协...
7,4 3 fcm 函数源代码(在 MATLAB 中输入 type fcm 可以...模糊C均值聚类matlab代码... 暂无评价 3页 免费 模糊聚类分析算法的MATL... 2页 2下载券 模糊c均值聚类+FCM算法的... 9页 2下载券 喜欢......K-means算法matlab的实现_数学_自然科学_专业资料。算法流程图开 始...17遗传算法改进的模糊C-均值聚类MAT...
思路:1.用数组保存这个超级大的数字,每个位置存一位;2.用循环每一位相加,进位就做标记,下一次加的时候多+1;3.最后循环出来检查标记位,如果有标记则最高位再放一个1;代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<in...