当前位置: 首页 > news >正文

网站开发只要中视频自媒体账号注册下载

网站开发只要,中视频自媒体账号注册下载,网站建设属于哪个经营范围,浏览器下载安装2023最新版【模板】最小生成树 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 输入格式 第一行包含两个整数 N , M N,M N,M,表示该图共有 N N N 个结点和 M M M 条无向边。 接下来 M M M 行…

【模板】最小生成树

题目描述

如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz

输入格式

第一行包含两个整数 N , M N,M N,M,表示该图共有 N N N 个结点和 M M M 条无向边。

接下来 M M M 行每行包含三个整数 X i , Y i , Z i X_i,Y_i,Z_i Xi,Yi,Zi,表示有一条长度为 Z i Z_i Zi 的无向边连接结点 X i , Y i X_i,Y_i Xi,Yi

输出格式

如果该图连通,则输出一个整数表示最小生成树的各边的长度之和。如果该图不连通则输出 orz

样例 #1

样例输入 #1

4 5
1 2 2
1 3 2
1 4 3
2 3 4
3 4 3

样例输出 #1

7

提示

数据规模:

对于 20 % 20\% 20% 的数据, N ≤ 5 N\le 5 N5 M ≤ 20 M\le 20 M20

对于 40 % 40\% 40% 的数据, N ≤ 50 N\le 50 N50 M ≤ 2500 M\le 2500 M2500

对于 70 % 70\% 70% 的数据, N ≤ 500 N\le 500 N500 M ≤ 1 0 4 M\le 10^4 M104

对于 100 % 100\% 100% 的数据: 1 ≤ N ≤ 5000 1\le N\le 5000 1N5000 1 ≤ M ≤ 2 × 1 0 5 1\le M\le 2\times 10^5 1M2×105 1 ≤ Z i ≤ 1 0 4 1\le Z_i \le 10^4 1Zi104

样例解释:

所以最小生成树的总边权为 2 + 2 + 3 = 7 2+2+3=7 2+2+3=7

代码

#include <stdio.h>
#include <stdlib.h>
#define MAXN 300000
#define MAXM 300000
typedef struct // 定义边的结构体
{int u, v, w;
}Edge;
Edge edges[MAXM]; // 存储所有的边
int pa[MAXN]; // 并查集数组,用于判断两个节点是否在同一棵树中
int N, M; // N是节点数,M是边数
int cmp(Edge a, Edge b); // 边的比较函数,按照边的权重从小到大排序
int find(int x); // 并查集的查找函数,用于查找节点x的根节点
int kruskal(); // Kruskal算法函数int main(int argc, char *argv[])
{int i;scanf("%d %d", &N, &M); // 读取节点数和边数for (i = 0; i < M; i++){scanf("%d %d %d", &edges[i].u, &edges[i].v, &edges[i].w);}int res = kruskal(); // 调用Kruskal算法计算最小生成树的权重if (res == -1) // 如果图不连通{printf("orz\n");}else{printf("%d\n", res);}return 0;
}int cmp(Edge a, Edge b) // 边的比较函数,按照边的权重从小到大排序
{return (a.w - b.w);
}int find(int x) // 并查集的查找函数,用于查找节点x的根节点
{while (pa[x] != x){x = pa[x];}return x; 
}int kruskal() // Kruskal算法函数
{int i, j;for (i = 0; i < M; i++) // 将所有的边按照从小到大排序{for (j = i + 1; j < M; j++){if (cmp(edges[i], edges[j]) > 0){Edge temp = edges[i];edges[i] = edges[j];edges[j] = temp;}}}for (i = 1; i <= N; i++) // 初始化并查集{pa[i] = i;}int res = 0; // 存储最小生成树的权重int cnt = 0; // 存储当前已经选择的边的数量for (i = 0; i < M; i++) // 遍历所有的边{int u = find(edges[i].u); // 边的一个节点int v = find(edges[i].v); // 边的另一个节点// 如果两个节点不在同一棵树中,说明这条边可以添加到最小生成树中if (u != v){res += edges[i].w; // 更新最小生成树的权重pa[u] = v; // 合并两棵树cnt++; // 更新已经选择的边的数量}}if (cnt != N - 1) // 如果选择边的数量小于N - 1,说明图不连通{return -1;}return res; // 返回最小生成树的权重
}
http://www.ds6.com.cn/news/112928.html

相关文章:

  • 二维码制作网站有哪些湖南长沙疫情最新消息
  • 网站建设与维护 课件怎么打开网站
  • 如何设计一个网页是优搜云seo
  • 厦门网站建设 金猪线上推广的公司
  • ui需要学哪些内容廊坊关键词优化报价
  • 顺义做网站企业网站官网
  • 如何制作网络游戏seo多久可以学会
  • 流量比对网站手机卡顿优化软件
  • 软件设计师考试大纲seo关键词排名软件流量词
  • 六安市住房和城乡建设局网站seo 优化思路
  • 网站设计如何自学百度一下马上知道
  • 网站开发的工作职责杭州网站seo推广
  • 网站侧栏设计真人seo点击平台
  • 威联通怎么建设网站爱站网 关键词挖掘工具
  • 建一个论坛网站怎么建seo研究协会网是干什么的
  • 清廉桂林网站aso安卓优化公司
  • 甘肃网站制作公司有哪些php免费开源crm系统
  • 企业3合1网站建设电话网络营销方法有几种类型
  • 旅游网站开发意义百度指数怎样使用
  • 申请域名免费黑龙江seo关键词优化工具
  • 常州知名网站建设公司广告发布平台app
  • 怎么做网站写手最佳的资源磁力搜索引擎
  • 外包网站开发多少钱郑州网络营销学校
  • 网站可视区最多可以做多大公司网站建设服务机构
  • 免费做苗木的网站外贸公司如何做推广
  • 搭建本地环境做网站营销手段有哪些方式
  • 营销型高端网站建设网络营销特点
  • 域名空间网站推广五种新型营销方式
  • 网站建设电子书合肥今天的最新消息
  • 网站日期选择器网址收录网站