题目:

计算带权无向连通图G的最小生成树。

输入格式:

第一行两个整数:N(1≤N≤300000),表示结点集;表示边的条数。
接下来M行,每行表示一条带权的边,用3个整数u,v,c表示,分别表示一条边的两个端点以及其权值(权值范围0≤c≤109)。

输出格式:

一个整数,表示G的最小生成树的边权之和。

输入样例:

5 10
1 2 3
1 3 7
1 4 9
1 5 5
2 3 6
2 4 8
2 5 4
3 4 9
3 5 7
4 5 2

输出样例:

15

题解:

那么只看题目的话,应该也能知道这个题是最小生成树吧

啥是最小生成树呢?

翻翻课本吧兄弟,直接讲实现方式。

首先,给边排个序。通过权值来排,从小到大。

然后,遍历这个序列,把这个序列里没用过的边用上,直到所有的点都连起来,就ojbk了。

那么在用边的时候,要注意不能出现环,有环的话就不是树了不是?而这里,就要用到传说中的最美丽的数据结构……之一!并查集了。至于并查集是啥,咋用,可以看这篇文章:
数据结构基础——并查集
(是的我还没有写,等写了就把链接贴出来)

代码:

#include <bits/stdc++.h>
using namespace std;
//虽然叫Node但是这个结构体表示的是边和它的权值
struct Node
{int u, v;int c;
};
//一会排序的时候会用到的函数
bool cmp(Node a, Node b)
{return a.c < b.c;
}
//存边的数组,一会的时候要排序遍历
vector<Node> G;//实现并查集的东东
vector<int> f; //判断i和j是不是在一个集合用的数组
//查找元素k所在的集合
int find(int k)
{return f[k] == k ? k : f[k] = find(f[k]);
}
//把x所在的集合和y所在的集合并起来
int unite(int x, int y)
{int t1 = find(x);int t2 = find(y);if(t1 != t2){f[t1] = t2;return true;}return false;
}//从这里看是好习惯哦
int main(int argc, char const *argv[])
{//输入用的巴拉巴拉,懂了吧int n, k;cin >> n >> k;//把数组开好f.resize(n + 3);//这个函数用来初始化数组,具体等我并查集那个文章吧iota(f.begin(), f.end(), 0);//输入边和权值了while(k--){int u, v, c;cin >> u >> v >> c;G.push_back({u, v, c});}//按照cmp这个函数定义的排序方式排个序sort(G.begin(), G.end(), cmp);//数有点大,开个long longlong long sum = 0;//遍历每个边,要是加进去成环的话,这个边是放不进并查集的for(auto i : G){if(unite(i.u, i.v))sum += i.c;}cout << sum;return 0;
}

离散数学 习题篇 —— 最小生成树相关推荐

  1. 离散数学 习题篇 —— k倍区间

    题目: 给定一个长度为N的数列A​1, A2, ⋯, AN, 如果其中一段连续的子序列Ai, Ai+1, ⋯, Aj(i≤j)之和是K的倍数,我们就称这个区间[i,j]是K倍区间. 你能求出数列中总共 ...

  2. 离散数学 习题篇 —— 图的基本概念——连通分支数

    题目: 计算无向图的连通分支数. 输入格式: 第一行是一个整数V,表示图有V个结点,结点编号0,1,2,-,V−1(1≤V≤10,000) 第二行是一个整数E,表示图中有E条边.(0≤E≤100,00 ...

  3. 计算机网络习题篇(一)

    参考: CCNA选择题一 CCNA选择题二 CCNA选择题三 CCNA(200-120)803题库V2.0-IP Address 36题 CCNAtest 640-801 题库翻译第2部分 计算机网络 ...

  4. 学习《C++ Primer Plus》习题篇1 第六版第6章习题

    看着玩着也算是把前六章看完了,前五章的习题都比较简单,对应各章重点的简单应用,第六章就明显比较综合了.在做题的时候期间也出了些自己意想不到的bug,感觉有必要总结一下,记下一些需要注意的点. 1. 注 ...

  5. MySQL下数据库习题篇:银行数据库习题(第五版)

    文章目录 一.查询数据习题(只使用相关关系代数指令) 1.Find all loans of over $1200 2.Find the loan number for each loan of an ...

  6. SQL专项复习(窗口函数第二弹)——习题篇03

    前言 能用单表优先用单表,即便是需要用group by.order by.limit等,效率一般也比多表高 不能用单表时优先用连接,连接是SQL中非常强大的用法,小表驱动大表+建立合适索引+合理运用连 ...

  7. 接上一篇--最小生成树之Prim算法(根据点来实现最小生成树)

    Prim算法:该算法也被称为加点法,从一个节点开始出发,每次迭代权值代价最小的边对应的点,加入到最小生成树中.算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点. 加入到生成数的时候就只有两个条 ...

  8. 与编程密切相关的数学——离散数学——代数系统篇

    文章目录 思维导图链接分享 代数系统 广义的代数系统 代数系统的基本概念 定义:设A是个非空集合且fi是A上的ni元运算,其中i = 1,2,-,m.由A及f1,f2,-,fm组成的结构,称为代数结构 ...

  9. SQL专项复习(使用GROUP BY, WITH AS)——习题篇02

    文章目录 系列文章目录 前言 一.pandas是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 废话不多说,直接由题学习各种函数及思想,直接开干! 一.1280. 学生们参加各科测试的次数 ...

  10. 数据结构——树(习题篇)

    本文会挑选树中相关例题进行讲解,并复习相关的知识点 建议先将题做一次,再看题解和答案 解二叉树的题目最简单的方法就是画图,即使某些概念忘记了,也可以通过对每个答案通过画图的方式去理解,反推或是排除等 ...

最新文章

  1. 路由器简化配置和ASA异步预共享密钥方式建立IKEV2的L2L ×××
  2. OpenCV下的灰度直方图生成及显示的源码,带详细注释
  3. Java中MessageFormat的使用
  4. 快速搭建基于 Serverless 的 .NET Core 数据库应用
  5. 类成员初始化顺序php,PHP-php类成员变量初始化的问题?
  6. oracle中作业无法执行,Oracle运行JOB报ORA-27492:无法运行作业
  7. 剑桥的商学院硕士的创业项目找我做tech lead,稳得一批
  8. VS Code Pettier设置换行最大宽度
  9. python增加子类的参数_python 子类向父类传递关键字参数
  10. spring 标注 详解
  11. whereis linux用法,whereis命令使用详解
  12. 接收URL参数乱码问题
  13. python tan图
  14. 国内镜像站——国外资源的代理站点
  15. UINO优锘:EMV,让IT告警实现至繁归于至简
  16. 将vue-admin-template组件默认英文语言改成中文
  17. ubuntu 彻底删除php7,Ubuntu彻底删除PHP7.0的方法
  18. 什么是MySQL数据库?应用环境有哪些?
  19. python 语音识别 离线_语音识别离线语音识别,SpeechRecognition
  20. (转)80后生存法则

热门文章

  1. AD18的一些简单操作
  2. 3)Allegro PCB Router Tutorial自动布线入门
  3. 海思Hi3716C多媒体芯片规格书介绍
  4. java项目实战达内代码_2018最新达内学子商城项目静态页面+sql+java代码
  5. 电工模拟接线软件 app_配电柜接线图
  6. 电子电路仿真软件中文版_软件分享|几款你从未见过的电子电路仿真软件
  7. DevExpress WPF控件3D打印应用场景 - 实现3D打印系统可视化窗口
  8. ansys17.0安装教程
  9. 番茄花园GHOST XP SP3 V1.61 Final纪念版 http://www.ghost2.cn
  10. IE10首个修复补丁出现 解决ASP.NET兼容性