Acwing.1375 奶牛回家(最短路朴素dijkstra)

题目

晚餐时间马上就到了,奶牛们还在各自的牧场中悠闲的散着步。

当农夫约翰摇动铃铛,这些牛就要赶回牛棚去吃晚餐。

在吃晚餐之前,所有奶牛都在自己的牧场之中,有些牧场中可能没有奶牛。

每个牧场都通过一条条道路连接到一个或多个其他牧场(可能包括其自身)。

有时,两个(可能是相同的)牧场通过一条以上的道路相连。

至少存在一个牧场与牛棚通过一条道路直接相连。

所有奶牛都能够成功的从自己的牧场沿道路返回牛棚。

聪明的奶牛们总会选择最短的路径回到牛棚之中。

每条道路都是可以双向行走的,奶牛的行走速度也都一样。

我们用 a∼z 和 A∼Y 来标记所有的牧场。

所有用大写字母标记的牧场中都存在一头奶牛,所有用小写字母标记的牧场中都不存在奶牛。

牛棚的标记为 Z ,这里最初是没有奶牛的。

现在你需要确定,哪一头奶牛能够最快到达牛棚,输出它最初所在的牧场的标记,并输出它走过的路径的长度。

注意,同一字母大小写标记的两个牧场(例如,牧场 A 和牧场 a )是两个完全不同的牧场。

输入格式

第一行包含整数 P ,表示连接牧场以及牛棚的道路的条数。

接下来 P 行,每行包含两个字母以及一个整数,表示被一条道路连接的两个牧场的标记,以及这条道路的长度。

输出格式

输出一个字母和一个整数,表示最快回到牛棚的牛最初所在的牧场的标记以及它走过的路径的长度。

数据保证最快回到牛棚的牛只有一头。

数据范围

1≤P≤10000 , 所有道路长度均不超过 1000 。

  • 输入样例:
5
A d 6
B d 3
C e 9
d Z 8
e Z 3
  • 输出样例:
B 11

题解

import java.io.*;
import java.util.Arrays;/*** @author akuya* @create 2024-04-13-12:29*/
public class CowGoHome {static int N=60;static int n=52,m;static int g[][]=new int[N][N];static int dist[]=new int[N];static boolean st[]=new boolean[N];public static void main(String[] args) throws IOException {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));PrintWriter pw=new PrintWriter(new OutputStreamWriter(System.out));for(int i=0;i<N;i++){Arrays.fill(g[i],0x3f3f3f);}m=Integer.parseInt(br.readLine());while(m--!=0){String s[]=br.readLine().split(" ");char a=s[0].charAt(0);char b=s[1].charAt(0);int r=Integer.parseInt(s[2]);int A=get(a);int B=get(b);g[A][B]=g[B][A]=Math.min(g[A][B],r);}Dijkstra();int res=1;for(int i=2;i<=25;i++)if(dist[i]<dist[res])res=i;pw.println((char)(res-1+'A')+" "+dist[res]);br.close();pw.flush();pw.close();}public static int get(char c){if(c<='Z'){return c-'A'+1;}else return c-'a'+27;}public static void Dijkstra(){Arrays.fill(dist,0x3f3f3f);dist[26]=0;for(int i=0;i<n-1;i++){int t=-1;for(int j=1;j<=n;j++){if(!st[j]&&(t==-1||dist[j]<dist[t]))t=j;}st[t]=true;for(int j=1;j<=n;j++)dist[j]=Math.min(dist[j],dist[t]+g[t][j]);}}}

思路

本题为经典的单源最短路问题,因为可以从终点往其他节点遍历。然后是如何选择的问题,最短路选择什么方法。具体选择方法如图所示。这道题优先选择朴素dijstra算法,背诵模板使用即可。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615378.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯【第15届省赛】Python B组

这题目难度对比历届是相当炸裂的简单了…… A&#xff1a;穿越时空之门 【问题描述】 随着 2024 年的钟声回荡&#xff0c;传说中的时空之门再次敞开。这扇门是一条神秘的通道&#xff0c;它连接着二进制和四进制两个不同的数码领域&#xff0c;等待着勇者们的探索。 在二进制…

一些知识点小细节

当遇到的问题有关逆序输出&#xff0c;可以转换一下思想&#xff0c;就是使用for循环的时候&#xff0c;i的初始化是从数组或者是字符串的最后一个&#xff0c;然后注意设置循环结束的条件&#xff0c;最重要的是不要忘记i--;而不是I&#xff1b; 注意&#xff1a;当要逆序输出…

Day 39:动态规划 LeedCode 62.不同路径 63. 不同路径 II

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#…

Suno AI

Suno is the latest big name in AI, but what is it? Keep reading to learn everything you need to know about Suno AI, including what it is, what it can do, and how much it costs. Suno AI是一款由Anthropic公司开发的人工智能音乐生成器&#xff0c;它利用先进…

在 Vue 3 中如何利用 TypeScript 进行类型检查和类型推断?

在 Vue 3 中&#xff0c;TypeScript 的集成得到了显著的改进&#xff0c;使得开发者可以更加便捷地进行类型检查和类型推断。以下是一些在 Vue 3 中利用 TypeScript 进行类型检查和类型推断的方法&#xff1a; 使用 <script setup> 语法&#xff1a;<script setup>…

Android适配平板屏幕尺寸

一、划分手机和平板 人为判断方法: 大于6英寸的就是平板。小于6英寸的都是手机 平板尺寸&#xff1a; 6英寸、7英寸、10英寸、14英寸… Android系统支持多配置资源文件&#xff0c;我们可以追加新的资源目录到你的Android项目中。命名规范&#xff1a; 资源名字-限制符 l…

python比较两张图片是否一样并复制

python比较两张图片是否一样并复制 1、导入库 pip install imagehash2、流程 1、通过PIL.image读取两张图片 2、通过imagehash.average_hash计算两张图片的哈希值并计较 3、如果相同则使用shutil.copy复制3、示例 img文件夹下有以下三张图片 import os import shutilimpo…

【机器学习】深入剖析贝叶斯算法原理及其广泛应用

一、引言 在机器学习的广阔领域中&#xff0c;贝叶斯算法以其独特的概率推理方式占据了重要的地位。它不仅为分类问题提供了有效的解决方案&#xff0c;还在自然语言处理、信息检索、垃圾邮件过滤等诸多领域发挥着不可替代的作用。 贝叶斯算法的基本思想源于贝叶斯定理&#xf…

MySQL基础知识——MySQL架构

看一个事儿千万不要直接陷入细节里&#xff0c;你应该先鸟瞰其全貌&#xff0c;这样能够帮助你从高维度理解问题。 同样&#xff0c; 对于MySQL的学习也是这样。平时我们使用数据库&#xff0c;看到的通常都是一个整体。 比如&#xff0c;你有个最简单的表&#xff0c;表里只…

JS - BOM(浏览器对象模型)

BOM 浏览器对象模型 BOM可以使我们通过JS来操作浏览器 在BOM中为我们提供了一组对象&#xff0c;用来完成对浏览器的操作 BOM对象 BOM&#xff08;Browser Object Model&#xff09;是指浏览器对象模型&#xff0c;它提供了与浏览器窗口进行交互的对象和方法。BOM包括一些核…

Xcode 15.0 新 #Preview 预览让 SwiftUI 界面调试更加悠然自得

概览 从 Xcode 15 开始&#xff0c;苹果推出了新的 #Preview 宏预览机制&#xff0c;它无论从语法还是灵活性上都远远超过之前的预览方式。#Preview 不但可以实时预览 SwiftUI 视图&#xff0c;而且对 UIKit 的界面预览也是信手拈来。 想学习新 #Preview 预览的一些超实用调试…

什么场景适合使用Traefik?

Traefik 作为一款现代的反向代理和负载均衡器&#xff0c;已经成为云原生环境中的热门选择。它提供的动态配置能力和强大的自动化功能使其在多种场景中非常有用。本文将详细探讨适合使用 Traefik 的几种关键场景&#xff0c;并解释为何在这些情况下它特别有用 &#x1f30d;&am…