2024蓝桥杯每日一题(最短路径)

news2024/12/23 5:49:04

备战2024年蓝桥杯 -- 每日一题
Python大学A组

        试题一:奶牛回家
        试题二:Dijkstra求最短路 II
        试题三:spfa求最短路
        试题四:作物杂交


试题一:奶牛回家

【题目描述】

        晚餐时间马上就到了,奶牛们还在各自的牧场中悠闲的散着步。当农夫约翰摇动铃铛,这些牛就要赶回牛棚去吃晚餐。在吃晚餐之前,所有奶牛都在自己的牧场之中,有些牧场中可能没有奶牛。每个牧场都通过一条条道路连接到一个或多个其他牧场(可能包括其自身)。有时,两个(可能是相同的)牧场通过一条以上的道路相连。至少存在一个牧场与牛棚通过一条道路直接相连。所有奶牛都能够成功的从自己的牧场沿道路返回牛棚。聪明的奶牛们总会选择最短的路径回到牛棚之中。每条道路都是可以双向行走的,奶牛的行走速度也都一样。我们用 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

【解题思路】

        Dijkstra题,简单变形了

【Python程序代码】

n = int(input())
g = [[1e9]*(60) for _ in range(60)]
def dy(a):
    if 'a'<=a<='z':
        a = ord(a)-ord('a')+1
    else:
        a = ord(a)-ord('A')+27
    return a


for i in range(n):
    a,b,c = map(str,input().split())
    a = dy(a); b = dy(b)
    g[a][b]=g[b][a]=min(g[a][b],int(c))
dist = [1e9]*100
dist[52]=0
def dijkstra():
    st = [0]*(100)
    for i in range(51):
        t = -1
        for j in range(1,53):
            if not st[j] and (t==-1 or dist[t]>dist[j]):
                t = j
        st[t]=1
        for j in range(1,53):
            dist[j] = min(dist[j],dist[t]+g[t][j])

dijkstra()
res,idx = 1e9,27
for i in range(27,52):
    if dist[i]<res:
        res = dist[i]
        idx = i
print(chr(ord('A') + idx -27) ,res)
    

试题二:Dijkstra求最短路2

【题目描述】

        给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。

请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。

【输入格式】

        第一行包含整数 n 和 m。

        接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。

【输出格式】

        输出一个整数,表示 1 号点到 n 号点的最短距离。

        如果路径不存在,则输出 −1。

【数据范围】

        1≤n,m≤1.5×105
        图中涉及边长均不小于 0,且不超过 10000

【输入样例】

3 3
1 2 2
2 3 1
1 3 4

【输出样例】

3

【解题思路】

        Dijkstra模板题

【Python程序代码】

from heapq import *
n,m = map(int,input().split())
h,e,ne,w,idx = [-1]*(n+10),[0]*(m+10),[0]*(m+10),[0]*(m+10),0
def add(a,b,c):
    global idx
    e[idx]=b; w[idx]=c; ne[idx]=h[a]; h[a]=idx; idx+=1
for i in range(m):
    a,b,c = map(int,input().split())
    add(a,b,c)
def dijkstra():
    dist = [1e9]*(n+10)
    st = [0]*(n+10)
    dist[1]=0
    q = []
    heappush(q,(0,1))
    while q:
        dis,idk = heappop(q)
        if st[idk]:continue
        st[idk]=1
        i = h[idk]
        while i!=-1:
            j = e[i]
            if dist[j]>w[i]+dis:
                dist[j] =dis+w[i]
                heappush(q,(dist[j],j))
            i = ne[i]
    if dist[n]==1e9:return -1
    return dist[n]

print(dijkstra())

试题三:spfa求最短路

【题目描述】

        给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数

        请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible

数据保证不存在负权回路。

【输入格式】

        第一行包含整数 n和 m。

        接下来 m 行每行包含三个整数 x,y,z表示存在一条从点 x 到点 y 的有向边,边长为 z。

【输出格式】

        输出一个整数,表示 1 号点到 n 号点的最短距离。

        如果路径不存在,则输出 impossible

【数据范围】

        1≤n,m≤105
        图中涉及边长绝对值均不超过 10000

【输入样例】

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

【输出样例】

2

【解题思路】

        SPFA模板题

【Python程序代码】

from collections import *
n, m = map(int, input().split())
g = defaultdict(list)
for _ in range(m):
    x, y, z = map(int, input().split())
    g[x].append((y, z))
inf  = float('inf')
q, vis, dist = deque(), set(),defaultdict(lambda : inf)
q.append(1)
vis.add(1)
dist[1] = 0
while q:
    t = q.popleft()
    vis.remove(t)
    for j, d in g[t]:
        if dist[j] > dist[t] + d:
            dist[j] = dist[t] + d
            if j not in vis:
                vis.add(j)
                q.append(j)
print(dist[n]) if dist[n] < inf / 2 else print("impossible")


试题四:作物杂交

【题目描述】

        作物杂交是作物栽培中重要的一步。已知有 N 种作物 (编号 11 至 N),第 i 种作物从播种到成熟的时间为 Ti。作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。如作物 A 种植时间为 55 天,作物 B 种植时间为 7 天,则 AB 杂交花费的时间为 7 天。作物杂交会产生固定的作物,新产生的作物仍然属于 N 种作物中的一种。初始时,拥有其中  种作物的种子 (数量无限,可以支持多次杂交)。同时可以进行多个杂交过程。求问对于给定的目标种子,最少需要多少天能够得到。如存在 4 种作物 ABCD,各自的成熟时间为 5 天、7 天、3 天、8 天。初始拥有 AB 两种作物的种子,目标种子为 D,已知杂交情况为 A×B→C,A×C→D。则最短的杂交过程为:第 1 天到第 7 天 (作物 B 的时间),A×B→C第 8 天到第 12 天 (作物 A 的时间),A×C→D花费 12 天得到作物 D的种子。

【输入格式】

        输入的第 1 行包含 4 个整数 N,M,K,T,N表示作物种类总数 (编号 1 至 N,M 表示初始拥有的作物种子类型数量,K 表示可以杂交的方案数,T 表示目标种子的编号。

        第 2 行包含 N 个整数,其中第 i 个整数表示第 i 种作物的种植时间 Ti。

        第 3 行包含 M 个整数,分别表示已拥有的种子类型 Kj,Kj 两两不同。

        第 4 至 K+3 行,每行包含 3 个整数 A,B,C,表示第 A 类作物和第 B 类作物杂交可以获得第 C 类作物的种子。

【输出格式】

        输出一个整数,表示得到目标种子的最短杂交时间。

【数据范围】

【输入样例】

6 2 4 6
5 3 4 6 4 9
1 2
1 2 3
1 3 4
2 3 5
4 5 6

【输出样例】

16

【解题思路】

        参考:AcWing 3305. 作物杂交(dijkstra/spfa,另类建图) - AcWing

【Python程序代码】

N = 2010
M = 200010
INF = 0x3f3f3f3f
h    = [-1] * N
e    = [0] * M
obj  = [0] * M
ne   = [0] * M
idx  = 0
st   = [False] * N
dist = [INF] * N
q    = [0] * N
hh   = 0
tt   = 0
def push(i):
  global tt
  st[i] = True
  q[tt] = i
  tt += 1
  if tt == N: tt = 0
def pop():
  global hh
  t = q[hh]
  hh += 1
  if hh == N: hh = 0
  st[t] = False
  return t
# a x b -> c
def add(a, b, c):
  global idx
  e[idx] = b
  obj[idx] = c
  ne[idx] = h[a]
  h[a] = idx
  idx += 1
def spfa():
  while hh != tt:
    x = pop()
    i = h[x]
    while i != -1:
      y, z = e[i], obj[i]
      nd = max(dist[x], dist[y]) + max(tm[x], tm[y])
      if dist[z] > nd:
        dist[z] = nd
        if not st[z]: push(z)
      i = ne[i]

  return dist[T]
rl = lambda: map(int, input().split())
_, _, k, T = rl()
tm = [0] + list(rl())
for i in rl():
  dist[i] = 0
  push(i)
for _ in range(k):
  a, b, c = rl()
  add(a, b, c)
  add(b, a, c)
print(spfa())

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE多线程】Thread类及其常见方法(上)

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

【opencv】dnn示例-segmentation.cpp 通过深度学习模型对图像进行实时语义分割

模型下载地址&#xff1a; http://dl.caffe.berkeleyvision.org/ 配置文件下载&#xff1a; https://github.com/opencv/opencv_extra/tree/4.x/testdata/dnn 该段代码是一个利用深度学习进行语义分割的OpenCV应用实例。下面将详细解释代码的功能和方法。 引入库 引入了一些必要…

蓝桥杯2024年第十五届省赛真题-宝石组合

思路&#xff1a;参考博客&#xff0c;对Ha,Hb,Hc分别进行质因数分解会发现&#xff0c;S其实就等于Ha&#xff0c;Hb&#xff0c;Hc的最大公约数&#xff0c;不严谨推导过程如下&#xff08;字丑勿喷&#xff09;&#xff1a; 找到此规律后&#xff0c;也不能枚举Ha&#xff…

Go 单元测试之mock接口测试

文章目录 一、gomock 工具介绍二、安装三、使用3.1 指定三个参数3.2 使用命令为接口生成 mock 实现3.3 使用make 命令封装处理mock 四、接口单元测试步骤三、小黄书Service层单元测试四、flags五、打桩&#xff08;stub&#xff09;参数 六、总结6.1 测试用例定义6.2 设计测试用…

医学图像三维重建与可视化系统 医学图像分割 区域增长

医学图像的三维重建与可视化&#xff0c;这是一个非常有趣且具有挑战性的课题&#xff01;在这样的项目中&#xff0c;可以探索不同的医学图像技术&#xff0c;比如MRI、CT扫描等&#xff0c;然后利用这些图像数据进行三维重建&#xff0c;并将其可视化以供医生或研究人员使用。…

解决Mac使用Vscode无法调用外部终端

前言 今天遇到一个很奇怪的问题&#xff0c;之前好好的用Vscode还能调用外部终端&#xff0c;怎么今天不行了&#xff1f;问题出在哪里呢&#xff1f;请听我娓娓道来。 检查配置文件 我查看了一下配置文件&#xff0c;发现配置文件都是调用外部控制台&#xff0c;没毛病啊。 …

Objective-C网络数据捕获:使用MWFeedParser库下载Stack Overflow示例

概述 Objective-C开发中&#xff0c;网络数据捕获是一项常见而关键的任务&#xff0c;特别是在处理像RSS源这样的实时网络数据流时。MWFeedParser库作为一个优秀的解析工具&#xff0c;提供了简洁而强大的解决方案。本文将深入介绍如何利用MWFeedParser库&#xff0c;以高效、…

(最详细)关于List和Set的区别与应用

关于List与Set的区别 List和Set都继承自Collection接口&#xff1b; List接口的实现类有三个&#xff1a;LinkedList、ArrayList、Vector。Set接口的实现类有两个&#xff1a;HashSet(底层由HashMap实现)、LinkedHashSet。 在List中&#xff0c;List.add()是基于数组的形式来添…

Spring Boot后端+Vue前端:打造高效二手车交易系统

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…

机器学习笔记 - 使用 OpenCV 的结构化森林进行边缘检测

一、简述 边缘检测是计算机视觉领域中一项非常重要的任务。这是许多纯计算机视觉任务(例如轮廓检测)的第一步。即使涉及深度学习,较深层也首先学习识别边缘,然后再学习图像的复杂特征。所以,我们可以说边缘检测在计算机视觉领域非常重要。拥有良好且高效的图像边缘检测算法…

后端返回的数据中含有Null的则不在前端展示

方式 1&#xff1a;application 上加配置 只需要在配置文件 上&#xff0c;增加 如下配置。 application 格式配置&#xff1a; spring.jackson.default-property-inclusionnon_null yml 格式配置&#xff1a; spring:jackson:default-property-inclusion: non_null注意&a…

美团财务科技后端一面:如何保证数据一致性?延时双删第二次失败如何解决?

更多大厂面试内容可见 -> http://11come.cn 美团财务科技后端一面&#xff1a;项目内容拷打 美团财务科技后端一面&#xff1a;项目相关面试题&#xff0c;主要包含 Zset、延时双删失败重试、热点数据解决、ThreadLocal 这几个方面相关的内容 由于前几个问题是对个人项目的…

混合云构建-如何创建一个高可用的Site to Site VPN 连接 Azure 和GCP云

在现代云计算环境中,企业通常会采用多云战略,将工作负载分布在不同的云服务提供商上。这种方式可以提高可用性、降低供应商锁定风险,并利用每个云提供商的独特优势。然而,在这种情况下,需要确保不同云环境之间的互联互通,以实现无缝的数据传输和应用程序集成。 本文将详细介绍…

微信小程序之点击事件

微信小程序中常用的点击事件主要是 tap&#xff0c;但除此之外还有其他的触摸类事件&#xff0c;用于不同的交互场景。以下是一些常见的点击和触摸相关的事件及其区别&#xff1a; 1、tap——最基本的点击事件&#xff0c;适用于一般的轻触交互&#xff0c;类似于 HTML 中的 c…

浅析binance新币OMNI的前世今生

大盘跌跌不休&#xff0c;近期唯一的指望就是binance即将上线的OMNI 。虽然目前查到的空投数量不及预期&#xff0c;但OMNI能首发币安&#xff0c;确实远超预期了。 OMNI代币总量1亿&#xff0c;初始流通仅10,391,492枚&#xff0c;其中币安Lanchpool可挖350万枚 对于OMNI这个…

【做算法学数据结构】【链表】删除排序链表中的重复元素

链表 链表单向链表双向链表 题目代码 链表 当涉及到数据结构时&#xff0c;链表是一种常见且重要的数据结构。链表由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的引用。相比于数组&#xff0c;链表的大小可以动态地增长或缩小&#xff0c;因为每个节点只需要…

风力发电自动化控制系统中的智能化技术应用研究

风力发电自动化控制系统中的智能化技术应用研究 随碳中和目标的提出和执行&#xff0c;风能发电作为新能源行业的核心部分&#xff0c;步入了它的黄金发展期。由于风能资源具有间歇性、随机性等特点&#xff0c;这给风电的高效利用带来了巨大挑战。为了增强风力发电系统的工作效…

枚举类型介绍

1.如果一个变量只有几种可能的值&#xff0c;比如星期几 son,mon,tus,wed,fri,sat 列表中的名字&#xff0c;可以自己定义&#xff0c;无需像变量一样去申请 枚举变量&#xff1a;只限列表中的情况&#xff0c;值默认从0开始&#xff0c;枚举元素不能被赋值&#xff0c;可以指定…

OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核

本文主要介绍如何使用Python和OpenCV库通过卷积操作来应用不同的图像滤波效果。主要分为几个步骤&#xff1a;图像的读取与处理、自定义卷积函数的实现、不同卷积核的应用&#xff0c;以及结果的展示。 卷积 在图像处理中&#xff0c;卷积是一种重要的操作&#xff0c;它通过…

JAVA网络编程、项目验证码实现

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…