T01 最优高铁修建方案

2022年8月3日记录,记录最近遇到的几道笔试题:

最优城市高铁修建方案

给定城市数量,可建设高铁的两个城市间的修建成本列表,以及结合城市商业价值会固定建设的两个城市间高铁。
请设计算法,达到修建城市高铁的最低成本,注意,需要满足城市圈内两两互联可达(通过其他城市中转也可以)
输入:
1.第一行,包含此城市圈中城市数量,可建设高铁的两城市间的修建成本列表数量,必建高铁的城市列表。三个数字用空格间隔
2.可建设高铁的两城市间的修建成本列表,为多行输入,格式为3个数字,用空格分割,长度不超过1000
3.固定要修建的高铁城市列表,是上面参数2的子集,可能为多行,每行输入为2个数字,以空格分割
城市id从1开始编号,建设成本的值为正整数,取值范围不会超过1000
输出:
修建城市圈高铁的最低成本,正整数。如果城市圈内存在两城市之间无法互联,返回-1.

样例1:

输入:
3 3 0
1 2 10
1 3 100
2 3 50
输出:60

样例2:

输入:
3 3 1
1 2 10
1 3 100
2 3 50
1 3
输出: 110

解题思路:

考虑这个问题,其实是求最小生成树的题目,不过就是增加了一些难度设置,就是可能会有必须要添加的边做初始集合,所以这里参考使用Kruskal算法,基于并查集的实现,先把必须修建高铁的边添加进去,之后就取最小花费的边进行判断,如果没有构成圈,就添加边,直到边集合有n-1条边结束,或者没有办法联通就输出-1

import java.util.*;class edge{int from;int to;int cost;public edge(int from,int to,int cost){this.from = from;this.to = to;this.cost = cost;}}
class Uniform{int[] root;public Uniform(int n){root = new int[n];for(int i=0;i<n;i++) root[i] = i;}public int find(int x){if(root[x]==x) return root[x];return  root[x] = find(root[x]);}public void union(int x,int y){int rx = find(x);int ry = find(y);if(rx!=ry){root[rx] = ry;}}public boolean check(int x,int y){return find(x)==find(y);}
}public class T {public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int k = sc.nextInt();edge[] edges = new edge[m];// int[][] graph = new int[1005][1005];HashMap<String,Integer> map = new HashMap<>();for(int i=0;i<m;i++){int from = sc.nextInt();int to = sc.nextInt();int cost = sc.nextInt();edges[i] = new edge(from,to,cost);StringBuilder key = new StringBuilder();key.append(edges[i].from);key.append(edges[i].to);map.put(key.toString(),i);key = new StringBuilder();key.append(edges[i].to);key.append(edges[i].from);map.put(key.toString(),i);}//然后是必须要选择的边int res = 0;Uniform uf = new Uniform(n+1);boolean[] vis = new boolean[n];int egs = 0;for(int j=0;j<k;j++){int from = sc.nextInt();int to = sc.nextInt();StringBuilder key = new StringBuilder();key.append(from);key.append(to);uf.union(from,to);int id = map.get(key.toString());res += edges[id].cost;vis[id] = true;egs++;}PriorityQueue<edge> Q = new PriorityQueue<>(new Comparator<edge>() {@Overridepublic int compare(edge o1, edge o2) {return o1.cost - o2.cost;}});for(int i=0;i<n;i++){if(!vis[i]) Q.offer(edges[i]);}while(!Q.isEmpty()){edge cur = Q.poll();if(uf.check(cur.from,cur.to)) continue;res += cur.cost;uf.union(cur.from, cur.to);egs++;}if(egs==n-1){System.out.println(res);}else  System.out.println(-1);}
}

[笔试题记录]T01 最优高铁修建方案相关推荐

  1. 记录一次Java笔试题记录一次Java笔试题

    记录一次Java笔试题 一.下列语句片段,运行结果是 二.这段代码运行结果是多少? 三.Object中有哪些公共方法? 四.java中基本数据类型有哪些? 五.循环中使用break.continue. ...

  2. 京东2018校招研发笔试题记录

    背景 这几天正好是各大互联网公司校招笔试的时间,于是陪着同学一起做了一下京东的笔试题.其中单选和不定项选择题涵盖的范围还是比较广的,包括子网掩码的计算.linux相关知识点.C++知识点.设计模式等. ...

  3. Python笔试题记录——字符串类笔试题自记

    目录 字符串距离 思路整理 完整代码 字符串提取 思路自记 计算重复字符串长度 思路自记 字符串连连看 思路自记 字符串匹配 思路自记 完整代码 字符串类笔试题总结 字符串距离 给出两个相同长度的由字 ...

  4. 2021届BiliBili校招 数据分析/后端开发 笔试题记录

    文章目录 1. 背景 2. 题型 3. 选择题范围 3.1 数据结构 3.2 计算机网络 3.3 操作系统 3.4 计算机组成 3.5 其他 4. 算法题 4.1 第一题 4.2 第二题 4.3 第三 ...

  5. 数字IC笔面试(一)——联发科提前批笔试题记录

    六月底参加了联发科提前批的数字IC笔试,自己能会一些的无非就是FPGA部分,还是凉凉了,不好好准备还是不行!!本文记录一下题目,毕竟复盘很重要啊,同时加入一些小的理解,若有错误,请指正,谢谢!! 对联 ...

  6. 网易2017年春招笔试题记录

    1 双核CPU 题目:一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意 ...

  7. 2023春实习笔试题记录

    文章目录 美团 3.25 1 模拟栈 2 最大美味值 I 3 每个背包最多装巧克力个数 4 类 Redis 实现 5 最大美味值 II 美团 4.1 1 计算练习 18/100 2 最小差距和 100 ...

  8. 测试开发linux基础面试题,网易2018测试开发实习生笔试题记录

    一.选择题 1.关于随机测试,以下哪一项说明是正确的? 随机测试是根据测试的经验在无测试用例的情况下进行的测试. 随机测试也是需要写一定的测试用例,但可以用例中没有的测试点. 随机测试不会产生测试冗余 ...

  9. Go_笔试题记录-不熟悉的

    1.golang中没有隐藏的this指针,这句话的含义是() A. 方法施加的对象显式传递,没有被隐藏起来 B. golang沿袭了传统面向对象编程中的诸多概念,比如继承.虚函数和构造函数 C. go ...

最新文章

  1. poj 3984
  2. ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  3. C#中GDI绘制高质量平滑图形实例
  4. socket websocket
  5. Python的基础--对象 转
  6. easyPR源码解析之plate_locate.h
  7. 【.net 深呼吸】项目中是否有必要删去多余的引用
  8. mysql列的数值型,字符型,日期型
  9. ubuntu下设置Android手机驱动
  10. 椭圆形建筑——逸夫演艺中心
  11. 祈澈姑娘:为自己代盐
  12. easyphp mysql_用EasyPHP本地搭建PHP环境 | Wopus
  13. 牛客练习赛85-哲学家的沉思-(上升子序列变形+树状数组+线段树+离散化+set)
  14. 解决方法数超65536(java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536)
  15. maven deploy
  16. 声音发生器、pwm、占空比
  17. 犀牛建立html格式,初学犀牛建模思路养成
  18. 有备无患!应届生CV算法岗面试指南
  19. Computer Vision
  20. SparseLab工具包安装尝试

热门文章

  1. 惠普win10一键还原_执行 HP 系统恢复 (Windows 10)
  2. TPAMI 2022|金字塔池化的骨干网络!南开达摩院联合推出P2T
  3. 智能卡应用的开发流程
  4. 甲骨文和IBM的IaaS云战略:畅所欲言,少投资
  5. 一分钟理解 HTTPS 到底解决了什么问题
  6. Silverlight是什么
  7. 电子邮件内容安全刻不容缓
  8. 计算机连接苹果手机不能找到照片目录,iPhone与电脑连接后找不到照片怎么办?掌握这三个技巧,烦恼问题轻松解决!...
  9. BZOJ1179【APOI2009】ATM Tarjan
  10. DHU OJ | 索引