7-2 哈利·波特的考试

news2024/11/18 5:56:23

哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。

现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这只动物变成任意一只指定动物的本事。于是他来问你:带什么动物去可以让最难变的那种动物(即该动物变为哈利·波特自己带去的动物所需要的魔咒最长)需要的魔咒最短?例如:如果只有猫、鼠、鱼,则显然哈利·波特应该带鼠去,因为鼠变成另外两种动物都只需要念4个字符;而如果带猫去,则至少需要念6个字符才能把猫变成鱼;同理,带鱼去也不是最好的选择。

输入格式:

输入说明:输入第1行给出两个正整数N (≤100)和M,其中N是考试涉及的动物总数,M是用于直接变形的魔咒条数。为简单起见,我们将动物按1~N编号。随后M行,每行给出了3个正整数,分别是两种动物的编号、以及它们之间变形需要的魔咒的长度(≤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

 一开始理解成求任意一动物变成其他动物所需的最短魔法总和,后面发现最短长度不对,重新看才发现是如果有一个动物可以变成其他N个动物,找到最短的一个方法使得该项中最长的魔法长度是所有方法中最短的.

那么可以理解:因为如果A -> B 的魔法长度为 n ,那么B -> A 的魔法也为n(反方向变化的魔咒就是简单地将原来的魔咒倒过来念)那么对于该图,只要有一个点可以连通其他所有点,就可以认为其他N - 1个点都可以到该图的任意点,那么该问题就转换成先求能否使所有点相互连通,若可以,求改图的最短路径(这里指的是所有方法中最长的那一条中的最短),可以用Floyed进行求任意俩点间的最短路径,然后进行一次遍历找到最终答案即可.

PS:如何判断是否连通?因为动物编号是1到N,那么可以理解没有0这个编号,只要最终判断以下ans是否被改值即可?又因为其他结点都初始化为了inf,如果无法连通,那么每一轮的最长魔法长度一定为inf,就不可能小于我们最终的maxlen,ans就不会改变

#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f, maxn = 110;
int MAP[maxn][maxn], N, M, A, B, len, ans, maxlen = inf;
void Floyed()
{
	for (int k = 1; k <= N; k++)//中转点
		for (int i = 1; i <= N; i++)
			for (int j = 1; j <= N; j++)
				if (MAP[i][j] > MAP[i][k] + MAP[k][j])
					MAP[i][j] = MAP[i][k] + MAP[k][j];
}

int main()
{ 
	cin >> N >> M;
    fill(MAP[0], MAP[0] + maxn * maxn, inf);
	for (int i = 1; i <= N; i++)
		MAP[i][i] = 0;
//	fill(MAP[0], MAP[0] + maxn * maxn, inf);
	while (M--)
	{
		cin >> A >> B >> len;
		MAP[B][A] = MAP[A][B] = len;
	}
	Floyed();
	for (int i = 1; i <= N; i++)
	{
		int temp = 0;
		for (int j = 1; j <= N; j++)
			temp = max(temp, MAP[i][j]);
		temp < maxlen ?  ans = i, maxlen = temp : temp = inf;
	}
	ans == 0 ? cout << ans << endl : cout << ans << " " << maxlen;
	return 0;
}

由于只要有一个点可以连通其他所有点,就可以认为其他N - 1个点都可以到该图的任意点,

对该题的Floyed无解时有一个简单的优化

如下:

#include<bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f, maxn = 110;
int MAP[maxn][maxn], N, M, A, B, len, ans, maxlen = inf;
void Floyed()
{
	for (int k = 1; k <= N; k++)//中转点
		for (int i = 1; i <= N; i++)
			for (int j = 1; j <= N; j++)
				if (MAP[i][j] > MAP[i][k] + MAP[k][j])
					MAP[i][j] = MAP[i][k] + MAP[k][j];
}

int main()
{ 
	cin >> N >> M;
    fill(MAP[0], MAP[0] + maxn * maxn, inf);
	for (int i = 1; i <= N; i++)
		MAP[i][i] = 0;
	while (M--)
	{
		cin >> A >> B >> len;
		MAP[B][A] = MAP[A][B] = len;
	}
	Floyed();
	for (int i = 1; i <= N; i++)
	{
		int temp = 0;
		for (int j = 1; j <= N; j++)
			temp = max(temp, MAP[i][j]);
		temp < maxlen ?  ans = i, maxlen = temp : temp = inf;
        if(ans == 0)return cout << ans << endl,0;
	}
	return cout << ans << " " << maxlen << endl,0;
}

又快又短的代码结果 :

 

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

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

相关文章

git的学习2

文章目录 一、Git 创建仓库二、Git 基本操作1总结 一、Git 创建仓库 git init Git 使用 git init 命令来初始化一个 Git 仓库&#xff0c;Git 的很多命令都需要在 Git 的仓库中运行&#xff0c;所以 git init 是使用 Git 的第一个命令。 在执行完成 git init 命令后&#xf…

Opencascad开发(C#)-建模-反向片体(SheetBody)的法向矢量

文章目录 1、前言2、在UG NX中构建一个片体3、在UG NX中查看片体的法向矢量4、采用UFun函数来实现法向反向5、代码实现6、测试效果1、前言 在UG NX中,一张曲面获取其所属的片体(SheetBody)对象,其在构建时有默认的法向矢量,有时处于功能的需求,比如加工时工件的材料去除方…

根据IP获取地理位置信息 — Golang

根据IP获取地理位置信息 — Golang 1 介绍1.1 ip2region1.2 geoip2-golang1.3 总结 2 使用2.1 ip2region2.2 geoip2-golang 1 介绍 1 ip2region 2 geoip2-golang 1.1 ip2region ip2region 是一个离线IP地址定位库和IP定位数据管理框架&#xff0c;10微秒级别的查询效率&…

ipad密码忘了怎么解锁?教你40秒轻松移除!

无论是手机还是平板&#xff0c;相信大部分都会去给它们设上密码&#xff0c;来保证自己的隐私安全。同理&#xff0c;无论是苹果设备还是安卓设备&#xff0c;一旦设了锁屏密码&#xff0c;就会遇到密码忘记的情况&#xff0c;多次输入错误密码还会导致设备被停用。 近日&…

上海亚商投顾:沪指放量上涨创年内新高 中字头个股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日高开高走&#xff0c;盘中一度涨近2%&#xff0c;站上3400点关口&#xff0c;深成指、创业板指走势较弱。…

openssl一套证书-配置文件和证书签发

dn-param 和 extend 配置文件 CA的dn-param 和 extend CA的dn-param 和 extend CI-csr.cnf 的内容如下&#xff1a; #openssl x509 extfile params extensions extend # This prevent the user to be prompted for values prompt nodistinguished_name dn-param [dn-param…

【C++】-对于自定义类型的输入输出运算符重载

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 文章目录 前言一、案例引入二、<<的重载三、>>的…

智慧城市3d可视化管理大屏系统有效提高服务质量和效率

随着新一代信息技术飞速融入传统产业&#xff0c;农业数字化、网络化、智能化逐步成为农业现代化发展的基石。实现农业生产环境的智能感知、智能预警、智能决策、智能分析等功能&#xff0c;为农业生产提供精准化保障、高质量运营水平、智能化决策支撑。 3D可视化智慧管理 1&am…

在docker上安装运行Python文件

目录 一、在docker中安装python 1.1 输入镜像拉取命令 1.2 查看镜像 1.3 运行 1.4 查看是否成功 1.5 查看python版本 二、运行py文件 2.1准备运行所需文件 2.2 准备文件夹 2.3 大概是这幅模样 2.4 打包上传到服务器上 2.5 构建镜像示例 2.6 查看镜像 2.7 优化镜像的…

微星GT77HX-13VI2023原厂Windows11重建F3一键恢复

MSI微星系列原厂预装正版系统恢复镜像有原机所有驱动&#xff0c;主题&#xff0c;Logo 安装后自动重建f3 msirestore功能 系统带所有驱动以及msi center小红龙 恢复至出厂状态 文件地址https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 其他型号: 微星 GE76-12代…

lua | 数组与迭代器的使用

目录 一、数组 一维数组 多维数组 二、迭代器 泛型for迭代器 无状态的迭代器 多状态的迭代器 本文章为笔者学习分享 学习网站&#xff1a;Lua 基本语法 | 菜鸟教程 一、数组 数组&#xff1a;相同数据类型的元素按一定顺序排列的集合&#xff0c;可以是一维数组和多维数…

就业Android倒数第二,IOS稳居倒数第一

在如今的互联网大环境下&#xff0c;相信有很多人都在为找工作而感到焦虑&#xff0c;每一投上十几份简历&#xff0c;收到的面试通知也就那么一两家&#xff0c;而且收到面试通知的都是一些小企业&#xff0c;工资低就不是很想去&#xff0c;工资高的岗位看了一下要求感觉自己…

解决uniapp在js文件中使用国际化报错问题

uniapp js 中如何使用国际化&#xff1f; 文章目录 uniapp js 中如何使用国际化&#xff1f;main.js 配置遇到问题解决方案Demo方式一&#xff1a;异步加载模块Promise 写法await写法 方式二&#xff1a;局部引入方式三&#xff1a;按需导入 main.js 配置 main.js 引入并初始化…

Python——pyqt5的计算器(源码+打包)

目录 一、效果图 二、源码 三、如何打包 四、如何减小打包程序大小&#xff08;方法1&#xff09; 五、如何减小打包程序大小&#xff08;方法2&#xff09; 学习视频 一、效果图 只是单纯的练手&#xff0c;然后再学习一下如何打包 二、源码 calculator_UI.zip - 蓝奏云…

论文阅读《Centralized Feature Pyramid for Object Detection》

论文地址&#xff1a;https://arxiv.org/pdf/2210.02093.pdf 源码地址&#xff1a;https://github.com/QY1994-0919/CFPNet 概述 特征金字塔模块在众多计算机视觉任务中都有优异的性能表现。针对现有的方法过渡关注于层间的特征交互而忽略了层内的特征交互的问题&#xff0c;本…

药物分子虚拟筛选规则

药物分子虚拟筛选规则 Lipinski Rule RO5是辉瑞公司资深药物化学家Christopher A. Lipinski在1997年提出&#xff0c;虽然随时代发展虽然其适用范围逐渐变窄&#xff0c;但仍然非常有参考意义。其主要内容如下&#xff1a; 分子量(Mw)小于500&#xff1b;氢键供体(HBD)数目小…

matlab 对线路板进行裁剪

缺陷图像目前还没有搞定————&#xff08;无奈&#xff09; test1 %Sobel方法 I imread(ChuanJian0.jpg); G rgb2gray(I); E1 edge(G, sobel); figure, subplot(2,2,1); imshow(I); title(Original Color Image); subplot(2,2,2); imshow(E1); title(Sobel Edge);E2 ed…

使用PyTorch构建神经网络,并计算参数Params

文章目录 使用PyTorch构建神经网络&#xff0c;并计算参数Params举例计算具有全连接层的神经网络的参数数量计算卷积神经网络的参数数量Params计算过程 总结 使用PyTorch构建神经网络&#xff0c;并计算参数Params 在深度学习中&#xff0c;模型的参数数量是一个非常重要的指标…

零基础学Java好找工作吗?好程序员告诉你入行Java有多惨?

为什么小源建议普通背景、零基础的大专生、本科生去学java编程呢&#xff1f; 因为真的香啊&#xff01;小白容易上岸&#xff0c;而且工作3年的话&#xff0c;基本年薪就能到50w&#xff08;只要你工作后也一直不断努力学习&#xff09;。java岗位属于技术岗&#xff0c;没有任…

Android进阶:Activity的生命周期和启动模式

Activity的生命周期和启动模式 作为Android四大组件之中存在感最强的组件&#xff0c;Activity应该是我们在学习Android中第一个碰到的新概念。在日常开发过程中我们肯定会用到Activity&#xff0c;但是关于Activity的一些细节问题运行机制我们可能还有一些不清楚的问题。今天…