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

农场--Kruskal应用--c++

【题目要求】

农场里有一些奶牛,作为食物的草料不够了。农场主需要去别的农场借草料。该地区有N (2 <= N <= 2,000) 个农场,农场名称用数字N标识,农场之间的道路是双向的,一共有M (1 <= M <= 10,000)条道路,单条长度不超过1,000,000,000里。有一些农场之间有多条道路相连。所有农场都有通路,连接到农场主的农场。农场主的农场是1号农场,他从自己的农场出发,去所有的农场借草料。

农场主需要在路上携带足够的水,假设马跑完一里路需要1盎司的水,在任意一个农场都可以补充水。那么他应该携带一个多大容量的水壶呢?

【思路】

求最小生成树,并找到生成树中的最长路径即为所求。

【输入输出】

输入:

第一行输入 N M

下面多行,每一行表示起点农场编号 终点农场编号 路径长度

输出:

水壶的容量,单位为盎司

【测试数据】

【样例输入】

3 3

1 2 12

2 3 123

1 3 50
【样例输出】

50

【代码--不用类】

#include<iostream>
#include<string>
using namespace std;
int arc[1000][1000];
int edgeNUM;  //边个数
int vertexNUM; //地点个数
//记录起始位置,终点位置,权值的结构体
struct Edge
{int from, to;int weight;
};//查找根节点
int findRoot(int parent[], int v)
{while (parent[v] != -1){v = parent[v];}return v;
}int main()
{cin >> vertexNUM >> edgeNUM;Edge e[1000];//输入for (int i = 0; i < edgeNUM; i++){cin >> e[i].from;cin >> e[i].to;cin >> e[i].weight;}//对权值进行排序Edge temp;for (int j = 0; j < edgeNUM - 1; j++){for (int i = 0; i < edgeNUM - 1 - j; i++){if (e[i].weight > e[i + 1].weight){temp = e[i];e[i] = e[i + 1];e[i + 1] = temp;}}}int parent[1000] ;  //记录根节点的数组//初始化for (int i = 0; i < vertexNUM; i++){parent[i] = -1;}int k = 0;int min[1000] = { 0 };for (int i = 0; i < edgeNUM; i++){if (i >= 1 && e[i - 1].from == e[i].from && e[i].to == e[i - 1].to){//筛选掉两地之间其他路径的情况,只考虑最短的那条路,因为前面已经对路径从小到大排了序,所以这里可以直接略过较长路径}else{int a = e[i].from;int b = e[i].to;//找到所在生成树的根节点int vex1 = findRoot(parent, a - 1); //因为题目下标是从1开始,而数组下标是从0开始,所以需要-1int vex2 = findRoot(parent, b - 1);//判断是否成环,如果两个节点的根节点下标不相等,不成环if (vex1 != vex2){   //合并生成树parent[vex2] = vex1;min[k] = e[i].weight;  //记录权值k++;}}}//遍历min找到最小生成树中的最长距离,即为农夫要带的水壶最大容量int MIN = min[0];for (int i = 0; i < k; i++){if (MIN < min[i]){MIN = min[i];}}cout << MIN;return 0;
}

http://www.lryc.cn/news/351919.html

相关文章:

  • 【Crypto】Rabbit
  • IRFB3207PBF TO-220 N沟道75V/180A 直插MOSFET场效应管
  • 基于单张图片快速生成Metahuman数字人(模型贴图绑定)的工作流演示
  • MySQL数据库下的Explain命令深度解析
  • 防火墙技术基础篇:基于IP地址的转发策略
  • OpenFeign快速入门 替代RestTemplate
  • 自动化测试--利用pytest实现整条业务链路测试
  • 学习其他推理判断
  • Centos7环境下MySQL5.7.38 安装开源审计插件 mysql-audit
  • 基于深度学习的表情识别系统
  • Debug-010-git stash的用法及使用场景
  • RustGUI学习(iced/iced_aw)之扩展小部件(二十五):如何使用tab部件来创建tab多页面切换?
  • P2P服务端模型配合 Tool.net P2pServerAsync 类使用
  • Python语法学习之 - 生成器表达式(Generator Expression)
  • docker所在磁盘空间不足 迁移数据
  • 15、24年--信息系统管理——管理要点
  • 如何使用 CapSolver 扩展找到 Google reCAPTCHA 站点密钥?
  • 安卓分身大师4.6.0解锁会员安卓14可用机型伪装双开多开
  • 攻防世界-mobile-easy-app详解
  • 【简单介绍下爬山算法】
  • Android App启动流程和源码详解
  • SQL的多表联查
  • 瑞芯微RV1126——人脸识别源码分析
  • springboot 两个相同类型的Bean使用@Resouce加载
  • 代码随想录算法跟练 | Day3 | 链表Part1
  • 虚拟化技术[1]之服务器虚拟化
  • WPF之容器标签之Canvas布局标签
  • AIGC绘画设计基础-建筑设计应用
  • Pinia:状态管理库
  • Mokito的一些API