PTA 7-8 哈利·波特的考试
题目描述
哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是 haha,将老鼠变成鱼的魔咒是 hehe 等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如 ahah 可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒 lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。
现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这只动物变成任意一只指定动物的本事。于是他来问你:带什么动物去可以让最难变的那种动物(即该动物变为哈利·波特自己带去的动物所需要的魔咒最长)需要的魔咒最短?例如:如果只有猫、鼠、鱼,则显然哈利·波特应该带鼠去,因为鼠变成另外两种动物都只需要念 4 个字符;而如果带猫去,则至少需要念 6 个字符才能把猫变成鱼;同理,带鱼去也不是最好的选择。
输入格式:
输入说明:输入第 1 行给出两个正整数 n (≤100)和 m,其中 n 是考试涉及的动物总数,m 是用于直接变形的魔咒条数。为简单起见,我们将动物按 1~$$n编号。随后m行,每行给出了3个正整数,分别是两种动物的编号、以及它们之间变形需要的魔咒的长度(\le 100$$),数字之间用空格分隔。
输出格式:
输出哈利·波特应该带去考场的动物的编号、以及最长的变形魔咒的长度,中间以空格分隔。如果只带1只动物是不可能完成所有变形要求的,则输出 0。如果有若干只动物都可以备选,则输出编号最小的那只。
输入样例:
6 11
3 4 70
1 2 1
5 4 50
2 6 50
5 6 60
1 3 70
4 6 60
3 6 80
5 1 100
2 4 60
5 2 80
输出样例:
4 70
题目分析
方法思路
-
问题分析:
-
将每个动物视为图的节点,魔咒视为无向边,边的权重为魔咒长度。
-
需要找到每个节点到其他所有节点的最短路径中的最大值,并选择这些最大值中最小的那个对应的节点。
-
-
算法选择:
-
使用 Floyd-Warshall 算法计算所有节点之间的最短路径,因为它适用于处理稠密图,且能高效计算多源最短路径。
-
-
步骤分解:
-
构建邻接矩阵并初始化。
-
使用 Floyd-Warshall 算法计算所有节点之间的最短路径。
-
检查每个节点是否可达所有其他节点,并计算每个节点的最长最短路径。
-
选择具有最小最长路径的节点,若有多个则选编号最小的。
-
示例代码
def main():import sysinput = sys.stdin.read().split()idx = 0n = int(input[idx])idx += 1m = int(input[idx])idx += 1INF = float('inf')d = [[INF] * n for _ in range(n)]for i in range(n):d[i][i] = 0for _ in range(m):u = int(input[idx]) - 1idx += 1v = int(input[idx]) - 1idx += 1w = int(input[idx])idx += 1if d[u][v] > w:d[u][v] = wif d[v][u] > w:d[v][u] = w# Floyd-Warshall算法for k in range(n):for i in range(n):for j in range(n):if d[i][j] > d[i][k] + d[k][j]:d[i][j] = d[i][k] + d[k][j]candidates = []for i in range(n):max_dist = 0valid = Truefor j in range(n):if d[j][i] == INF:valid = Falsebreakif d[j][i] > max_dist:max_dist = d[j][i]if valid:candidates.append((i + 1, max_dist)) # 动物编号是i+1if not candidates:print(0)else:# 按照max_dist升序,动物编号升序排列candidates.sort(key=lambda x: (x[1], x[0]))print(candidates[0][0], candidates[0][1])if __name__ == "__main__":main()
代码解释
-
输入处理:
-
读取输入的动物数
n和魔咒数m。 -
初始化邻接矩阵
d,其中d[i][j]表示动物i+1到动物j+1的最短路径长度。
-
-
邻接矩阵构建:
-
处理每条魔咒输入,更新邻接矩阵中的对应边权重,确保取最小值。
-
-
Floyd-Warshall 算法:
-
动态规划计算所有节点之间的最短路径。
-
-
候选节点筛选:
-
检查每个节点是否可达所有其他节点。
-
计算每个节点的最长最短路径,并筛选出符合要求的候选节点。
-
-
结果输出:
-
根据最长路径长度和动物编号排序候选节点,输出最优解。
-
自我实现代码
#include<stdio.h>
#include<string.h>#define maxInt 2147483647typedef struct {int arcs[102][102];int vexnum, arcnum;
} MGraph;int final[102];//final[w]=1表示求得顶点v0至vw的最短路径
int D[102]; //记录v0到vi的当前最短路径长度
int P[102]; //记录v0到vi的当前最短路径vi的前驱int i, u, j, m, v, min, w, k, a, b, c, min1 = 999999, max = -991111, p = 0;void Dijkstra(MGraph G, int v0) {for (v = 0; v < G.vexnum; v++) //初始化数据{final[v] = 0; //全部顶点初始化为未知最短路径状态D[v] = G.arcs[v0][v];// 将与v0点有连线的顶点加上权值P[v] = -1; //初始化路径数组P为-1}D[v0] = 0; //v0至v0路径为0final[v0] = 1; // v0至v0不需要求路径// 开始主循环,每次求得v0到某个v顶点的最短路径for (v = 1; v < G.vexnum; v++) {min = maxInt; // 当前所知离v0顶点的最近距离for (w = 0; w < G.vexnum; w++) // 寻找离v0最近的顶点{if (!final[w] && D[w] < min) {k = w;min = D[w]; // w顶点离v0顶点更近}}final[k] = 1; // 将目前找到的最近的顶点置为1for (w = 0; w < G.vexnum; w++) // 修正当前最短路径及距离{// 如果经过v顶点的路径比现在这条路径的长度短的话if (!final[w] && (min + G.arcs[k][w] < D[w])) { // 说明找到了更短的路径,修改D[w]和P[w]D[w] = min + G.arcs[k][w]; // 修改当前路径长度P[w] = k;}}}
}int main() {MGraph G;memset(final, 0, sizeof(final));memset(D, 0x3f3f3f3f, sizeof(D));memset(G.arcs, 0x3f3f3f3f, sizeof(G.arcs)); //邻接矩阵一定要初始化scanf("%d %d", &G.vexnum, &m);for (i = 0; i < m; i++) {scanf("%d %d %d", &a, &b, &c);G.arcs[a - 1][b - 1] = c;G.arcs[b - 1][a - 1] = c;}for (u = 0; u < G.vexnum; u++) {max = -9999999;Dijkstra(G, u);for (j = 0; j < G.vexnum; j++) {if (D[j] > max)max = D[j];}if (max < min1) {min1 = max;p = u + 1;}}if (p == 0)printf("0");elseprintf("%d %d\n", p, min1);return 0;
}
相关文章:
PTA 7-8 哈利·波特的考试
题目描述 哈利波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是 haha,将老鼠变成鱼的魔咒是 hehe 等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如 ahah 可以将老鼠变…...
纯html文件实现目录和文档关联
目录结构 效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>项目结题报告</title><style lang"scss">::-webkit-scrollbar {width: 6px;height: 6px;}::-webkit-scro…...
共绘智慧升级,看永洪科技助力由由集团起航智慧征途
在数字化洪流汹涌澎湃的当下,企业如何乘风破浪,把握转型升级的黄金机遇,已成为所有企业必须直面的时代命题。由由集团,作为房地产的领航者,始终以前瞻视野引领变革,坚决拥抱数字化浪潮,携手数字…...
如何搭建个人静态住宅IP:从零开始
你好!今天我们将一起探索如何从头开始搭建个人静态住宅IP。无论您是为了远程办公、在线教育还是游戏加速,静态住宅IP都能带给您更稳定的网络体验。 一、准备阶段 1. 明确需求 首先,您需要清楚自己为什么需要静态住宅IP。可能是为了实现远程…...
《打造视频同步字幕播放网页:从0到1的技术指南》
《打造视频同步字幕播放网页:从0到1的技术指南》 为什么要制作视频同步字幕播放网页 在数字化信息飞速传播的当下,视频已然成为内容输出与获取的核心载体,其在教育、娱乐、宣传推广等诸多领域发挥着举足轻重的作用 。制作一个视频同步字幕播…...
自学嵌入式第27天------TCP和UDP,URL爬虫
1. TCP和UDP区别 **TCP(传输控制协议)和UDP(用户数据报协议)**是两种主要的传输层协议,它们在数据传输方式上有显著区别: 连接性: TCP是面向连接的协议,通信前需通过三次握手建立连…...
C++ 学生成绩管理系统
一、项目背景与核心需求 成绩管理系统是高校教学管理的重要工具,本系统采用C++面向对象编程实现,主要功能模块包括: 学生信息管理(学号/姓名/3门课程成绩) 成绩增删改查(CRUD)操作 数据持久化存储 统计分析与报表生成 用户友好交互界面 二、系统架构设计 1. 类结构设计 …...
Spring Cloud Alibaba 实战:轻松实现 Nacos 服务发现与动态配置管理
1. Nacos 介绍 1.1 什么是 Nacos? Nacos(Naming and Configuration Service)是阿里巴巴开源的一个服务注册中心和配置管理中心。它支持动态服务发现、配置管理和服务治理,适用于微服务架构,尤其是基于 Spring Cloud …...
关于sqlalchemy的使用
关于sqlalchemy的使用 说明一、sqlachemy总体使用思路二、安装与创建库、连结库三、创建表、增加数据四、查询记录五、更新或删除六、关联表定义 说明 本教程所需软件及库python3.10、sqlalchemy安装与创建库、连结库创建表、增加数据查询记录 一、sqlachemy总体使用思路 在…...
三维建模与视频融合(3D-Video Integration)技术初探。
三维建模与视频融合(3D-Video Integration)是一种将虚拟三维模型无缝嵌入实拍视频场景的技术,广泛应用于影视特效、增强现实(AR)、游戏开发、广告制作 、视频监控 等领域。 一、技术核心流程 三维建模与动画 使用工具…...
springboot3 RestClient、HTTP 客户端区别
1 RestClient使用 RestClient 是 Spring 6.1 M2 中引入的同步 HTTP 客户端,它取代了 RestTemplate。同步 HTTP 客户端以阻塞方式发送和接收 HTTP 请求和响应,这意味着它会等待每个请求完成后才继续下一个请求。本文将带你了解 RestClient 的功能以及它与…...
分布式存储学习——HBase概述
1.1 HBase概述 1.1.1 理解大数据背景 1.1.2 HBase是什么 1.1.3 HBase与Hadoop的关系 1.1.4 HBase的核心功能模块 1.1.5 HBase的应用场景和经典案例 1.1.6 小结 本文参考于学校《HBase应用于开发》教材 1.1 HBase概述 本节将介绍大数据背景和HBase的基本概念,…...
LLM run
lmstudio lmstudio ollama ollama N 卡使用自带UI gpu加速推理 ,选择满足条件的, ds模型选择列表 https://ollama.com/library/deepseek-r1 a卡当前支持的显卡型号 I卡 gpu加速配置 2025.3 intel Official project optimization https://www.modelscope.cn/m…...
HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解
1、HttpServletRequest 所属框架:Java Servlet API(基于阻塞式 I/O)。 使用场景:传统的 Servlet 应用(如 Spring MVC的Tomcat、常用的容器等等)。 作用:表示客户端的 HTTP 请求。 常用方法&a…...
【大模型基础_毛玉仁】2.2 大语言模型架构概览
【大模型基础_毛玉仁】2.2 大语言模型架构概览 2.2 大语言模型架构概览2.2.1 主流模型架构的类别1)Encoder-only 架构2)Encoder-Decoder 架构3)Decoder-only 架构 2.2.2 模型架构的功能对比1)注意力矩阵2)适用任务 2.2…...
微信小程序点击按钮,将图片下载到本地
前言: 最近在公司完成一个小程序的时候需要实现一个功能:点击按钮获取用户相册权限,将图片下载到用户本地相册,经过了好几次的尝试最终算是实现了。将总结的经验在这里分享给小伙伴们。 实现方式: //.wxml文件 <…...
在Linux系统上集成OpenSlide与SpringBoot
本文档详细介绍如何在Linux系统上安装OpenSlide并将其与Spring Boot应用程序集成,以实现数字病理切片的处理和查看功能。 目录 OpenSlide简介在Linux上安装OpenSlide安装OpenSlide Java绑定在Spring Boot项目中集成OpenSlide示例代码性能优化建议常见问题解决参考资源OpenSli…...
现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示
目录 现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示一、前言二、现代密码学体系架构设计原则1. 安全性原则2. 模块化设计3. 最小权限原则4. 加密算法的选择5. 硬件加速与GPU应用6. 可扩展性与可维护性三、主要加密算法解析1. 对称加密算法:AES2. 非对称…...
pt-archiver删除数据库的数据表/各种报错类型
这篇帖子是前面文的一部分延申 mysqlimport导入一亿数据的csv文件/一行命令删除表-CSDN博客 如需转载,标记出处 目录 pt-archiver命令格式 如果执行后出现下面报错 1)Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233. …...
LLM 学习(一 序言)
文章目录 LLM 学习(一 序言)知识点1:“Embedding” 在人工智能领域:知识点2:Embedding 引入位置信息的原因知识点3:在 Transformer 的 Decoder 翻译第 i 个单词时进行 Mask 第 i1 个单词的操作 LLM 学习&am…...
STM32-HAL库初始化时钟
使能和失能外设GPIOA 时钟信号初始化函数 HAL_RCC_OscConfig函数: HAL_StatusTypeDef是该函数的返回值类型,最顶上的那句话只是这个函数的原型 HAL_RCC_ClockConfig函数: 因为FLASH实际上只能支持24MHz的时钟信号所以如果用高于24MHz的信号输入则要用到等…...
MySQL主从架构配合ShardingJdbc实现读写分离
文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…...
批量将 Word 拆分成多个文件
当一个 Word 文档太大的时候,我们通常会将一个大的 Word 文档拆分成多个小的 Word 文档,在 Office 中拆分 Word 文档是比较麻烦的,我们需要将 Word 文档的页面复制到另外一个 Word 文档中去,然后删除原 Word 文档中的内容。当然也…...
【算法系列】桶排序算法介绍及实现
文章目录 桶排序算法介绍及实现桶排序的基本原理算法实现步骤Java代码实现性能优化结论 桶排序算法介绍及实现 桶排序的基本原理 桶排序(Bucket Sort)是一种基于分组的排序算法,其核心思想是将一组数据按某种 规则分配到多个桶中࿰…...
当AI开始“思考“:拆解大模型训练与推理的秘密(以DeepSeek为例)
如果你用过deepseek,可能体验过它在几秒内编故事、写代码的震撼。但你是否想过,这种"智能输出"背后存在两种完全不同的底层机制?就像人类需要先学习知识(训练)才能考试答题(推理)&…...
13.数据结构(软考)
13.数据结构(软考) 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的,即在使用数组之前需要分配固定大小的空间。 时间复杂度: 读:O(1) 查询:1,(n1)/2&#x…...
拉拉扯扯adfda
read -p "请输入一个成绩:" sorce if [ "$sorce" -ge 90 -a "$sorce" -le 100 ] thenecho A elif [ "$sorce" -ge 80 -a "$sorce" -lt 90 ] thenecho B elif [ "$sorce" -ge 70 -a "$sorce"…...
【计算机网络】TCP
1.基本概念及报文格式 基本概念: TCP的中文全称为传输控制协议(Transmission Control Protocol),是一种可靠的,面向连接的,基于字节流的传输层通信协议。 报文格式: 序号 :占32⽐…...
doris: PostgreSQL
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 PostgreSQL 数据库。本文档介绍如何配置 PostgreSQL 数据库连接。 使用须知 要连接到 PostgreSQL 数据库,您需要 PostgreSQL 11.x 或更高版本 PostgreSQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓…...
深度学习笔记——神经网络
本文为在拓尔思智能举办的训练营中学习内容的总结,部分内容摘自百度百科 个人在这里推荐一个好用的软件,Trae,主要是免费。 人工神经元是人工神经网络的基本单元。模拟生物神经元,人工神经元有1个或者多个输入(模拟多…...
