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

道路建设(最小生成树)

道路建设

题目描述

随着如今社会的不断变化,交通问题也变得越来越重要,所以市长决定建设一些公路来方便各个城市之间的贸易和交易。虽然市长的想法很好,但是他也遇到了一般人也经常头疼的问题,那就是手头的经费有限……

在规划过程中,设计师们已经预算出部分城市之间建设公路的经费需求。现在市长想知道,它能不能将他的m 个城市在有限的经费内实现公路交通。如果可以的话,输出Yes,否则输出No(两个城市不一定要直接的公路相连,间接公路到达也可以。)

输入格式

测试输入包含多条测试数据。

每个测试数据的第 1 行分别给出可用的经费 c,道路数目 n,以及城市数目 m。接下来的 n 行给出建立公路的成本信息,每行给出三个整数,分别是相连的两个城市 v 1 、v 2 以及建设公路所需的成本 h。

输出格式

对每个测试用例,输出 Yes 或 No。

样例输入输出

样例输入#1
 
20 10 5
1 2 6
1 3 3
1 4 4
1 5 5
2 3 7
2 4 7
2 5 8
3 4 6
3 5 9
4 5 2
样例输出#1
 
Yes
样例输入#2
 
10 2 2
1 2 5
1 2 15
样例输出#2
 
Yes

数据范围

对于100%的数据,保证 c<1000000,n<10000, m<100,0<v1,v2≤m,ℎ<100,且两个城市之间可能存在多条线路。

思路

这题的思路很明显是利用最小生成树的思想,首先通过最小生成树算法(我用的prim算法)计算出要花的经费,再与题干中的经费c对比大小,如果比c小就说明有方案Yes,否则就是No。具体实现思路在代码备注中。

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);Long c=scanner.nextLong();int n=scanner.nextInt();int m=scanner.nextInt();int [][]city=new int[m+1][m+1];//地图数组//初始化city,初始都是100,也就是正无穷,不可达for(int i=0;i<m;++i){for(int j=0;j<m;++j){city[i][j]=100;}}//根据输入设置city的初始化值for(int i=0;i<n;++i){//因为题干中是从1开始的,但是数组是从0开始的,所以每个都要-1int x=scanner.nextInt()-1;int y=scanner.nextInt()-1;int h=scanner.nextInt();//因为题干中说了每个城市之间有不同的路线,所以在city数组中只保存最小的路线if(city[x][y]>h){city[x][y]=h;city[y][x]=h;}}//vis表示哪些结点访问过boolean []vis=new boolean[m];//初始只有0结点访问过for (int i=0;i<m;++i){vis[i]=false;}vis[0]=true;//利用prim最小生成树来做,寻找每次的最小权重的值,// 为了防止寻找到的边会组成圈,所以在邻接矩阵中已访问的结点中的边寻找最小边// 并且最小边满足列中对应的结点在vis没有访问过,而行在vis中访问过,按照这样寻找到的最小边就是不会成圈的边for (int i=0;i<m-1;++i){int min=101;int node=m+1;for (int j=0;j<m&&vis[j];++j){for (int k=0;k<m;++k){if(vis[k]) continue;if(min>city[j][k]){min=city[j][k];node=k;}}}// 把寻找到的最小边对应的结点放进vis中vis[node]=true;// 没找到一个最小边就去减经费c,如果最后c大于零说明有方案,否则就没有方案c-=min;}if(c>=0) System.out.println("Yes");else System.out.println("No");}
}

相关文章:

  • springboot+bootstrap+java农业电商服务商城系统_30249
  • flutter vscode gradle 配置
  • MATLAB常用绘图函数的使用
  • 完美解决k8s master节点无法ping node节点中的IP或Service NodePort的IP
  • windows搭建gitlab教程
  • PostgreSQL中所的锁
  • MQTT通信协议使用说明
  • 防雷接地+防雷工程施工综合方案
  • 最新红盟云卡个人自动发卡开源系统源码+全开源无加密+虚拟商品在线售卖平台
  • 4、FFmpeg命令行操作5
  • 无人驾驶相关硬件汇总
  • 如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中
  • echarts 多toolti同时触发图表实现
  • 数理统计的基本概念(二)
  • 操作系统安装在哪里?
  • python3.6+scrapy+mysql 爬虫实战
  • 07.Android之多媒体问题
  • 2019年如何成为全栈工程师?
  • create-react-app做的留言板
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • HTTP 简介
  • java2019面试题北京
  • java8 Stream Pipelines 浅析
  • JavaScript类型识别
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS题目及答案整理
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 回流、重绘及其优化
  • 使用权重正则化较少模型过拟合
  • 微信开源mars源码分析1—上层samples分析
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用jquery写贪吃蛇
  • Java数据解析之JSON
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #vue3 实现前端下载excel文件模板功能
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (四) 虚拟摄像头vivi体验
  • (四)JPA - JQPL 实现增删改查
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net 受管制代码
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • ::
  • @ConfigurationProperties注解对数据的自动封装
  • @软考考生,这份软考高分攻略你须知道
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)