问题描述

栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。

C市中有n个比较重要的地点,市长希望这些地点重点被考虑。现在可以修一些道路来连接其中的一些地点,每条道路可以连接其中的两个地点。另外由于C市有一条河从中穿过,也可以在其中的一些地点建设码头,所有建了码头的地点可以通过河道连接。

栋栋拿到了允许建设的道路的信息,包括每条可以建设的道路的花费,以及哪些地点可以建设码头和建设码头的花费。

市长希望栋栋给出一个方案,使得任意两个地点能只通过新修的路或者河道互达,同时花费尽量小。

输入格式

输入的第一行包含两个整数n, m,分别表示C市中重要地点的个数和可以建设的道路条数。所有地点从1到n依次编号。
  接下来m行,每行三个整数a, b, c,表示可以建设一条从地点a到地点b的道路,花费为c。若c为正,表示建设是花钱的,如果c为负,则表示建设了道路后还可以赚钱(比如建设收费道路)。
  接下来一行,包含n个整数w_1, w_2, …, w_n。如果w_i为正数,则表示在地点i建设码头的花费,如果w_i为-1,则表示地点i无法建设码头。
  输入保证至少存在一个方法使得任意两个地点能只通过新修的路或者河道互达。

输出格式

输出一行,包含一个整数,表示使得所有地点通过新修道路或者码头连接的最小花费。如果满足条件的情况下还能赚钱,那么你应该输出一个负数。

样例输入

5 5
1 2 4
1 3 -1
2 3 3
2 4 5
4 5 10
-1 10 10 1 1

样例输出

9
样例说明
  建设第2、3、4条道路,在地点4、5建设码头,总的花费为9。

问题分析

1)将问题符号化
撇开市长,东东,其实就是一个图的问题
2)问题转化
图上的任意两点可通,求最小花费。其实就是一个最小生成树问题

ps:
不要被码头,河流搞晕了,可以把河流想象成一个虚拟的点,建设了码头就相当于从码头所在点连一条线到那个虚拟的点。

Java代码实现

上面已经分析过了,这个问题用最小生成树就能解,所以这次的代码调用最小生成树代码就成。
最小生成树的代码我原先写过,详见这篇文章
最小生成树 Kruskal算法 Java实现

import java.util.ArrayList;
import java.util.List;
public class ExerciseBuildCity {public static void main(String[] args) {List<Edge> edgeList=build();Kruskal obj=new Kruskal(edgeList,6);int totalDistance=0;for(Edge e:obj.getT()){totalDistance+=e.getDistance();System.out.println(e.toString());}System.out.println("总代价"+totalDistance);}private static List<Edge> build() {List<Edge> li=new ArrayList<>();li.add(new Edge("1","2",4));li.add(new Edge("1","3",-1));li.add(new Edge("2","3",3));li.add(new Edge("2","4",5));li.add(new Edge("4","5",10));li.add(new Edge("0","2",10));li.add(new Edge("0","4",1));li.add(new Edge("0","3",10));li.add(new Edge("0","5",1));return li;}
}

运行样例数据的结果

蓝桥杯 城市建设问题 java实现相关推荐

  1. 2021 第十二届 蓝桥杯 国赛决赛 Java B组 真题 详细解析

    文章目录 2021 第十二届 Java B组 国赛 真题答案 详细解析 试题A: 整数范围 答案:255 分析: Code: 试题B: 纯质数 答案:1903 分析: Code: 试题C: 完全日期 ...

  2. c语言奇怪的分式11,蓝桥杯-奇怪的分式-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  3. java蓝桥杯加法变乘法_蓝桥杯-加法变乘法-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  4. 2020十一届蓝桥杯国赛二等奖Java B组

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 参考博客https://blo ...

  5. 第五届蓝桥杯校内选拔赛试题java组_第五届蓝桥杯校内选拔赛试题java组

    第五届"蓝桥杯"全国软件和信息技术专业人才大赛 校内选拔赛试题(Java组) 第一部分:准备工作: 1.在D:盘中建立一个以自己"学号+姓名"命名的考生文件夹. ...

  6. 蓝桥杯第八届省赛JAVA真题----油漆面积

    标题:油漆面积 X星球的一批考古机器人正在一片废墟上考古. 该区域的地面坚硬如石.平整如镜. 管理人员为方便,建立了标准的直角坐标系. 每个机器人都各有特长.身怀绝技.它们感兴趣的内容也不相同. 经过 ...

  7. 蓝桥杯第八届省赛JAVA真题----k倍区间

    标题: k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍 ...

  8. 蓝桥杯软件类比赛java,第十届蓝桥杯大赛软件类省赛

    第十届蓝桥杯大赛软件类省赛 这些题官网还没有解答的,我主要参考了b站UP主大雪菜的解法(绝大部分题先自己做了一遍),当然也网上查了一些解答,但发现现在网上的一些解法并不正确,希望可以给大家一个参考. ...

  9. 蓝桥杯2018省赛Java开发大学C组思路总结

    1.标题:哪天返回 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. 他决定在x星战打工.好心的老板答应包食宿,第1天给他1元钱. 并且 ...

最新文章

  1. 天体摇摆仪的工作原理-测量电路中的部分电路波形
  2. python+requests实现接口测试 - get与post请求使用
  3. android 录屏
  4. 【Python】pip工具使用知识,模型保存pickle,PDF与docx相互转换处理
  5. dcase_util教程
  6. 体重 年龄 性别 身高 预测鞋码_【新手扫盲】身高体重性别年龄身体素质影响玩滑板吗?...
  7. CSS制作简单loading动画
  8. 5分绩点转4分_5分绩点转4分(五分制 四分制 对照表)
  9. 又来Hello World了,Hello Python
  10. BlockingQueue阻塞队列及其实现
  11. 高通:骁龙将成为独立的产品品牌
  12. javascript forEach方法
  13. IOS 打包后安装崩溃,debug正常运行
  14. 如何完全卸载mysql呢
  15. 2022华为软件精英挑战赛-总结
  16. win10计算机扫描,Win10系统下如何使用扫描仪
  17. 阿里服务器微信发不了图片,为什么微信发不了图片?这四招教你解决难题
  18. 企业智能化管理固定资产的新思路
  19. 深度学习 | BN层原理浅谈
  20. 美国企业邮箱怎么注册,有没有可替代国外邮箱的国内邮箱?

热门文章

  1. 使用python提取url中的顶级域名及其后缀
  2. 相似图片搜索--哈希特征值
  3. springboot+dubbo+redis+RabbitMQ 项目整合实例【附完整源码】
  4. Bandit总结3详细版
  5. homework530
  6. 用于视觉语言导航的自监督三维语义表示学习
  7. CVPR2021 最佳论文 Giraffe,当之无愧的最佳,或开创新的篇章
  8. Linux进程KILL--Quit,INT,HUP,QUIT,和TERM、PIPE的解释
  9. 用基础jQuery制作个性化留言板
  10. android操作系统如何卸载软件,安卓手机系统预装软件如何卸载