图论之cruskal算法(克鲁斯卡尔)

news/2025/3/20 13:46:52/

我们已经学了prim算法了,接下来我们来学一下cruskal算法,和prim算法不同的点就在于prim是不断的加结点,而cruskal是不断的加边,不断的加最小的边,我们需要把每个边的权值用结构体存起来,然后排序,从小到大遍历边,不断的加边

如图,我们从权值最小的边开始

当我们把1,2权值为2的边加上去的话,就不符合我们要找生成树的性质了,

那我们怎么维护生成树呢?我们可以把形成生成树的这些结点都放在一个集合里,然后接下来看插入的边的两个结点是不是位于生成树集合里,如果位于生成树集合的话就不连了

OK,那么废话不多说,我们来实现一下代码吧

#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
const int N = 2e5 + 10, INF = 0x3f3f3f3f;
struct node {int x;//结点1int y;//结点2int z;//权值 
}a[N];
int fa[N];
int find(int x)
{if (fa[x] == x) return x;return fa[x] = find(fa[x]);
}
void un(int x, int y)
{int px = find(x); int py = find(y);fa[px] = py;
}
bool cmp(const node& x, const node& y)
{return x.z < y.z;
}
int ret = 0;
int cnt = 0;//记录加入了几条边 
int kk()
{sort(a + 1, a + 1 + m, cmp);for (int i = 1; i <= m; i++){int x1 = a[i].x, y1 = a[i].y;int z1 = a[i].z;int fx = find(x1), fy = find(y1);if (fx != fy){ret += z1;cnt++;un(fx, fy);}}return cnt == n - 1 ? ret : INF;
}
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){fa[i] = i;}for (int i = 1; i <= m; i++){cin >> a[i].x >> a[i].y >> a[i].z;}int r = kk();if (r == INF) cout << "orz" << endl;else cout << r << endl;return 0;
}


http://www.ppmy.cn/news/1580610.html

相关文章

游戏引擎学习第162天

回顾与即将进行的调试工作概述 有人提了一个关于 C 运行时库的问题&#xff0c;所以画面有些不同。不过现在已经调整回正常的画面&#xff0c;大家看到的就是平时熟悉的界面了。 今天的内容是继续在不使用任何引擎和库的情况下&#xff0c;编写一个完整的游戏。 上周已经完成…

第十五届蓝桥杯C/C++B组拔河问题详解

解题思路 这道题目的难点在于枚举所有区间&#xff0c;并且区间不能重合&#xff0c;那么这样感觉就很难了。但是用下面这种方法就会好很多。 我们只需要将左边的所有区间的各种和放在一个set中&#xff0c;然后我们在枚举右边的所有区间的和去和它进行比较&#xff0c;然后…

【初学者】请介绍一下指针分析(Pointer Analysis)?

李升伟 整理 指针分析&#xff08;Pointer Analysis&#xff09; 指针分析&#xff08;Pointer Analysis&#xff09;是一种静态程序分析技术&#xff0c;用于确定程序中指针可能指向的内存位置或对象。它是编译器优化、程序验证、漏洞检测和并行化等领域的重要基础。 1. 指…

Redis高级结构-布隆过滤器

可以将布隆过滤器看成一个set&#xff0c;但是这个set可能不太准&#xff0c;当你使用它的contains方法判断时&#xff0c;他可能会误判。但只要设置的参数合理&#xff0c;精确度还是非常高的。当布隆过滤器说某个值存在的时候&#xff0c;那这个值可能不存在。但是当其判断某…

深入理解JVM类加载机制:从原理到实践

引言 Java虚拟机(JVM)是Java语言的核心,而类加载机制是JVM的重要组成部分。理解类加载机制不仅有助于我们更好地掌握Java程序的运行原理,还能帮助我们在实际开发中解决类加载相关的问题。本文将深入探讨JVM类加载机制的原理、类加载器的层次结构、双亲委派模型以及如何自定…

C程序设计(第五版)及其参考解答,附pdf

通过网盘分享的文件&#xff1a;谭浩强C语言设计 链接: https://pan.baidu.com/s/1U927Col0XtWlF9TsFviApg?pwdeddw 提取码: eddw 谭浩强教授的《C程序设计》是C语言学习领域的经典教材&#xff0c;其内容深入浅出&#xff0c;适合不同层次的学习者。 一、教材版本与特点 最…

【PyTorch][chapter-37][MOE- Mixture of Experts Explained 】[2]

接 【PyTorch][chapter-36][MOE- Mixture of Experts Explained 】[1]-CSDN博客 什么是 MOE&#xff08;Mixture of Experts&#xff09;MOE 的简史什么是稀疏性&#xff1f;负载均衡(load Balancing)MOE and TransformerSwitch Transformers使用路由器Z损失稳定训练Expert…

vscode vue3 jsconfig 与 tsconfig的区别

1、基本说明 ‌jsconfig.json和tsconfig.js的主要区别在于它们的应用场景和功能。‌ 应用场景 ‌jsconfig.json‌&#xff1a;主要用于JavaScript项目&#xff0c;特别是那些需要JavaScript语言服务支持的项目。它相当于tsconfig.json的“allowJs”属性设置为true&#xff0…