NowCoder今年买了一辆新车,他决定自己开车回家过年。回家过程中要经过ň个大小收费站,每个收费站的费用不同,你能帮他计算一下最少需要给多少过路费吗?

输入描述:
输入包含多组数据,每组数据第一行包含两个正整数M(1≤m≤500)和N(1≤n≤30),其中Ñ表示有Ñ个收费站,编号依次为1,2 ,...,n。出发地的编号为0,终点的编号为n,即需要从0到n。

紧接着m行,每行包含三个整数f,t,c,(0≤f,t≤n ; 1≤c≤10),分别表示从编号为˚F的地方开到吨,需要交Ç元的过路费。
输出描述:
对应每组数据,请输出至少需要交多少过路费。
示例1

输入

8 4 
0 1 10
0 2 5
1 2 2
1 3 1
2 1 3
2 3 9
2 4 2
3 4 4

输出

7

代码如下:

 package com.yzh.hehe;

 import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class LeatestCarFee { public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()) {
String string=scanner.nextLine();
int m =Integer.valueOf(string.split("\\s+")[0]);
int n =Integer.valueOf(string.split("\\s+")[1]);
List<FeeLine>[] arr = new List[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=new ArrayList<FeeLine>();
}
for (int i = 0; i < m; i++) {
string=scanner.nextLine();
String[] sArr = string.split("\\s+");
makeGraph(arr, sArr);
}
System.out.println(leatestCarFee(arr));
}
scanner.close(); } private static int leatestCarFee(List<FeeLine>[] arr) {
int[] costArr = new int[arr.length+1];//记录起点到各点的最小值
//索引0位置的值设为0(初始值)
for (int i = 1; i < costArr.length; i++) {
costArr[i]=Integer.MAX_VALUE;
}
int[] findArr=new int[arr.length+1];//是否被找到值得点
int aim = 0;
while (aim!=arr.length) {
findArr[aim]=1;
aim=getLeatest(costArr, aim, arr,findArr);
}
return costArr[aim]; } //首先找到离起点值最小(v)的点(m),点m与起点的最小值即为v,再把v与点m的邻接点(n...)的值相加和起点到这些点(n...)的值作比较更新
//重复以上步骤找出所求点到起点的最小值
private static int getLeatest(int[] costArr, int point, List<FeeLine>[] arr,int[] findArr) {
int size=arr[point].size();
int pFee=costArr[point];
for (int i = 0; i < size; i++) {
FeeLine feeLine=arr[point].get(i);
if (feeLine.fee+pFee<costArr[feeLine.point]) {
costArr[feeLine.point]=feeLine.fee+pFee;
}
}
FeeLine rec=new FeeLine(Integer.MAX_VALUE, Integer.MAX_VALUE);
for (int i = 1; i < costArr.length; i++) {
if (costArr[i]<rec.fee&&findArr[i]!=1) {
rec.fee=costArr[i];
rec.point=i;
}
}
return rec.point;
} private static void makeGraph(List<FeeLine>[] arr,String[] sArr ) {
FeeLine feeLine=new FeeLine(Integer.valueOf(sArr[1]), Integer.valueOf(sArr[2]));
arr[Integer.valueOf(sArr[0])].add(feeLine);
} } class FeeLine {
int point;
int fee;
FeeLine(int point,int fee){
this.point=point;
this.fee=fee;
}
}
 

解题(LeatestCarFee -计算最少过路费)的更多相关文章

  1. NOIP2010解题报告

    今天状态不错..1个小时AC了前3题,第四题第一次也拿到了80%的分数,后来换了算法才拿到全部分数.. 第一题: 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原 ...

  2. USACO Section 1.3 Ski Course Design 解题报告

    题目 题目描述 有N座山,每座山都有一个高度,现在由于农夫想避税,所以想把这些山的高度进行一些改变,使得最高的山与最低的山之间的高度差不超过17.每座山最多只能改变一次高度,每次改变高度都会产生一定的 ...

  3. 2010noip提高组解题报告

    https://www.luogu.org/problem/show?pid=1514 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 ...

  4. 【转】UVa Problem 100 The 3n+1 problem (3n+1 问题)——(离线计算)

    // The 3n+1 problem (3n+1 问题) // PC/UVa IDs: 110101/100, Popularity: A, Success rate: low Level: 1 / ...

  5. 洛谷 P3965 [TJOI2013]循环格 解题报告

    P3965 [TJOI2013]循环格 题目背景 一个循环格就是一个矩阵,其中所有元素为箭头,指向相邻四个格子. 每个元素有一个坐标(行,列),其中左上角元素坐标为\((0,0)\).给定一个起始位\ ...

  6. 洛谷 P2746 [USACO5.3]校园网Network of Schools 解题报告

    P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校&q ...

  7. 水壶-[Kruskal重构树] [解题报告]

    水壶 本来从不写针对某题的题解,但因为自己实在是太蠢了,这道题也神TM的恶心,于是就写篇博客纪念一下 H水壶 时间限制 : 50000 MS 空间限制 : 565536 KB 评测说明 : 2s,51 ...

  8. UVa 1374 快速幂计算(dfs+IDA*)

    https://vjudge.net/problem/UVA-1374 题意:给出n,计算最少需要几次能让x成为x^n(x和已经生成的数相乘或相除). 思路:IDA*算法. 如果当前数组中最大的数乘以 ...

  9. 洛谷 P1514 引水入城 解题报告

    P1514 引水入城 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好构成一个 NN 行 \times M×M 列的矩形,如上图所示,其中每个格 ...

随机推荐

  1. docker配置phpadmin需要注意的地方

    因为web服务是在容器内跑的,ip地址注意,如果没有特殊配置,应该使用172.

  2. Nodejs+MQTT

    客户端 https://github.com/mqttjs/MQTT.js 服务端 https://github.com/mcollina/mosca ionci3 使用mqtt.js   Brosw ...

  3. ISE_pll_ip的建立

    创建clk的ip核以及设置PLL的时钟输出 原理:外部晶振输入50M的频率,由ip核输出想要的频率 1.新建工程model再在"芯片"名称上建立clk的ip核 2.设置输入写为50 ...

  4. Tomcat应用部署

    1.Tomcat安装配置 1.1安装包下载 http://tomcat.apache.org/ 选择下载安装包版本 选择适合当前系统的安装包 安装包目录说明: 1.2环境配置 配置用户名密码conf/ ...

  5. vue 跨域问题

    前段时间做一个vue打包成安卓和IOS的App,遇到了跨域问题,直接拿了之前项目的配置,却不起作用. import org.springframework.context.annotation.Con ...

  6. [UE4]插值interp

    插值 在两个数之间补充一些数,让过渡变得更自然. UE4引擎提供的插值 一.CInterp To:颜色(Color)插值.C:Color,颜色. 二.FInterp To.FInterp To Con ...

  7. 4、redis 分布式锁

    1. 前言 关于分布式锁的实现,目前常用的方案有以下三类: 数据库乐观锁: 基于分布式缓存实现的锁服务,典型代表有 Redis 和基于 Redis 的 RedLock: 基于分布式一致性算法实现的锁服 ...

  8. java.lang.Long 类源码解读

    总体阅读了Long的源码,基本跟Integer类类似,所以特别全部贴出源码,直接注释进行理解. // final修饰符 public final class Long extends Number i ...

  9. asp源码微信扫码授权登陆电脑版

    网站接入微信扫码登录并获取用户基本信息(完美绕过微信开放平台)电脑版网站实现微信扫码登录,注册会员还要设密码太麻烦,会员也记不住密码,采用微信扫码登录网站更方便,会员无需设密码,用他的微信做为系统登录 ...

  10. Python2中生成时间戳(Epoch,或Timestamp)的常见误区

    在Python2中datetime对象没有timestamp方法,不能很方便的生成epoch,现有方法没有处理很容易导致错误.关于Epoch可以参见时区与Epoch 0 Python中生成Epoch ...