首页 > 其他分享 >最小生成树

最小生成树

时间:2023-07-03 14:36:33浏览次数:29  
标签:return int sum 最小 整数 生成 fa 节点

题目

京海市城市规划部门计划修建一个大型地铁网络,将城市中的重要交通支点用地铁网络连接起来,以方便市民通行。 但是节点过多,预算不够,让京海市城市规划部门十分头疼,请你用计算机帮助他们进行设计这个网络,要求是在将重要交通支点连接起来的前提下,使修建地铁网络的费用最低。

Input

存在多组测试数据,每组数据包含所给定的地图要素信息:

每组数据的第一行包含两个整数:重要交通节点的数量 N 和可修建地铁路线的数量 M 。 重要交通节点的编号用 1 到 N 的整数代替。

之后的 M 行包含三个整数:前两个整数为地铁线路连接的两个节点的编号 a 和 b ,第三个整数为通过该线路连接这两个节点的花费 W 。

1≤N≤50
1≤M≤10^5
1≤W≤100

注意!!!若 N 为 0 ,则结束输入。

Output

对于每组测试数据,仅输出一行,包含一个整数:将所有关键节点连接起来的最低花费。 保证一定至少有一种方案,使得所有关键节点连通。

Sample

input:

1 0

2 3
1 2 37
2 1 17
1 2 68

3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32

5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12

0

output:

0
17
16
26

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010

int n, m; //n个点,m条边
int sum, ans, cnt; //sum记录连接的边数
int fa[MAXN];
struct node { //结构体
   int x;//端点之一
   int y;//端点之二
   int w;//边权值
} a[MAXN];
int cmp(node x, node y) { //将数据按照从小到大的顺序排序
   return x.w < y.w;
}
int find(int x) {
   if (x == fa[x])
   	return x;
   else {
   	fa[x] = find(fa[x]);
   	return fa[x];
   }
}
void kruskal() {
   for (int i = 1; i <= m; i++) {
   	cin >> a[i].x >> a[i].y >> a[i].w;
   }
   for (int i = 1; i <= n; i++) {
   	fa[i] = i;
   }
   sort(a + 1, a + 1 + m, cmp);
   for (int i = 1; i <= m; i++) { //加边
   	int x = find(a[i].x);
   	int y = find(a[i].y);
   	if (x != y) { //如果不在同一个集合
   		fa[y] = x; //合并
   		sum++;//边数加1
   		ans += a[i].w;
   		if (sum == n - 1) { //如果边数达到n-1,则寻找完毕
   			break;
   		}
   	}
   }
}

int main() {
   while (cin >> n) {
   	if (n == 0) break;
   	ans = 0;
   	sum = 0;
   	cin >> m;
   	kruskal();
   	cout << ans << endl;
   }

   return 0;
}

标签:return,int,sum,最小,整数,生成,fa,节点
From: https://www.cnblogs.com/bzlx1717/p/17522798.html

相关文章

  • JAVA生成xml文件格式
    publicboolean A(参数1,……){Documentdocument=DocumentHelper.createDocument();Namespacena=Namespace.get("");Strings=null;na=new Namespace(xxxxxxxxxxxxxxxxxxxxx);//命名空间Elementroot=document.addElement(newQName(“A......
  • Python黑魔法:探秘生成器和迭代器的神奇力量
    在Python中,生成器和迭代器是实现惰性计算的两种重要工具,它们可以帮助我们更有效地处理数据,特别是在处理大数据集时,可以显著减少内存的使用。接下来,我们将详细介绍这两种工具。一、迭代器迭代器是一种特殊的对象,它可以遍历一个集合中的所有元素。任何实现了__iter__()和__next_......
  • Git生成ssh密钥及配置
    由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSHkey,在此之前,必须要生成SSHkey。第1步:创建SSHKey。在windows下查看[c盘->用户->自己的用户名->.ssh下是否有id_rsa、id_rsa.pub文件,如果没有需要手动生成。在开始菜单中打开git下的gitb......
  • BackUpLogView 系列 - 生成日志数据库脚本(MS Sql Server)
     在企业管理器中执行脚本CREATEDATABASE[BackupLogview]ONPRIMARY(NAME=N'BackupLogview',FILENAME=N'C:\DATA\BackupLogview.mdf',SIZE=3072KB,MAXSIZE=UNLIMITED,FILEGROWTH=1024KB)LOGON(NAME=N'BackupLogview_log',F......
  • 使用 ABAP 调用 Adobe Document Service 生成 PDF 文档
    我以前在SAP成都研究院BYDForm开发团队工作过5年,负责BYDBO输出成PDF的功能开发。AdobeDocumentService(ADS)是SAPNetWeaverASJava堆栈的一部分,提供了用于创建和处理PDF文件的功能。在ABAP系统中,可以通过调用ADS服务来生成和处理PDF文档。这种集成使得ABAP开发人员能......
  • 小工具 | cnblogs自动上传图片并生成markdown
    博客文章在本地都是用typora写的,文本可以直接复制上去,图片一个个上传太麻烦,这里推荐一个dotnet工具,给一个本地的typora文档,它会自动读取图片,上传到cnblogs,并替换掉原文档里的图片链接很方便,mark一下,工具地址为链接......
  • 分享6款文字语音生成驱动虚拟数字人说话的开源项目
    一、FACEGOOD的Audio2Facegithub地址:github.com/FACEGOOD/FA…FACEGOOD对输入和输出数据做了相应的调整,声音数据对应的标签不再是模型动画的点云数据而是模型动画的blendshape权重。FACEGOOD主要完成Audio2Face部分,ASR、TTS由思必驰智能机器人完成。如果你想用自己的......
  • 验证码生成技术的学习总结(C#)
    作者:光脚丫思考 一、概述一直以来对于验证码这玩意都是使用了别人编写好的代码,最多也就是稍微的做点修改罢了。虽然别人做的东西并不是非常的适合自己使用,但还是给将就将就了一番。这几天呢?不知道是哪里高兴了,终于是好好的把一些别人早就已经使用过的验证码技术给好好的拿来学习学......
  • jar文件打包成exe以及生成安装程序
    仅以此文献给还在为打包jar文件而徘徊挣扎的朋友...所需工具下载地址如下:launch4j(jar-->exe)Setup.zip(exe-->安装程序) jar-->exe-->安装程序详细步骤如下: 1.解压下载好的launch4j,并打开其中的launch4j.jar或者launch4j.exe。  2.打开之后launch4j后,如下图:step1:选择你的jar文......
  • Golang实现图片与视频的缩略图生成
    图片与视频的缩略图是一个十分常见的需求,比如即时消息。这里摘取了Golang项目中的相关代码,分享图片与视频相关处理的开发经验。图片缩略图缩略图的尺寸分为两种规则:1)边长模式,生成正方形缩略图;2)宽高模式,又分三种:指定宽高、指定宽(高等比缩放)、指定高(宽等比缩放)。如果原图为png或gif,缩......