7-2 哈利·波特的考试

这篇具有很好参考价值的文章主要介绍了7-2 哈利·波特的考试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是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;
}

又快又短的代码结果 :

7-2 哈利·波特的考试文章来源地址https://www.toymoban.com/news/detail-436819.html

到了这里,关于7-2 哈利·波特的考试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 ZBrush、Ornatrix 和 Substance 3D Painter 重现哈利波特中的凤凰

    今天瑞云渲染小编给大家带来了Ramón Tapia 分享 Phoenix 项目背后的工作流程,解释了如何在 Ornatrix 中完成修饰,并展示了纹理化过程。 你好,有创造力的读者朋友们 我的名字是Ramón,但在数字艺术领域,我的名字是ramon.exr。为什么叫这个名字?嗯,外面有太多人叫我的名字,

    2024年02月12日
    浏览(51)
  • win10你的电脑遇到问题需要重新启动(Win10你的电脑遇到问题)

    系统出现问题,你可以尝试还原系统,你这个月都应该是没法开机了,重启也还是这样的话。建议你还原系统试试看看再说。实在不行就重装系统吧,我看你的这个界面应该是第三方提供的电脑系统在机体拿掉电池插座后拆开,祛除灰尘。使用学生橡皮轻轻擦拭一下铜质接口

    2024年02月08日
    浏览(70)
  • 备考分享丨云计算HCIE实验考试需要注意什么

    去年九月底我在朋友的推荐下报考了誉天的云计算方向,在此期间我非常感谢田sir、苗苗老师和凡凡老师,每次我遇见问题找他们都能给我完完全全的解决,给我这个非科班出身的学员很大的鼓励与帮助。 我是经济学专业,毕业之后没有考研,找工作也不合我的心,于是在家

    2024年04月14日
    浏览(71)
  • 为什么你的手机需要更大的内存

    可以确定的是,手机已经先于电脑开启了AI计算时代,新发布的手机几乎都集成了AI处理器,那为什么你还需要更大的内存呢,下面我们来探讨下这个问题。 虽然目前新发布的手机并不都集成了AI处理器,但AI处理器已经成为了一种趋势和特色,越来越多的手机厂商开始开发和

    2024年02月02日
    浏览(51)
  • PHP 基础知识:40 道选择题测试你的掌握程度期末考试必备

    当然可以!以下是40道关于PHP的理论选择题,希望对您有所帮助: PHP的缩写代表什么? a) Personal Hypertext Preprocessor b) Preprocessed Hypertext Processor c) PHP: Hypertext Preprocessor d) Programming Hypertext Processor 答案: c 在PHP中,如何输出文本到浏览器? a) echo “Hello World!”; b) print(“Hello World!”

    2024年02月02日
    浏览(60)
  • win10你的设备遇到问题,需要重启的五种解决方法

    当我们使用win10电脑遇到“你的设备遇到问题,需要重启。我们只收集某些错误信息,然后为你重新启动”的错误信息提示的时候,我们应该怎么解决呢?这一般都是系统中软件冲突导致的,下面来看看详细的解决方法吧。 win10你的设备遇到问题,需要重启的五种解决方法 方法

    2024年02月05日
    浏览(69)
  • 华为od统一考试B卷【需要打开多少监视器】JAVA 实现

             所有题目均有五种语言实现。 C实现目录 、 C++ 实现目录 、 Python实现目录 、 Java实现目录 、 JavaScript实现目录 某长方形停车场,每个车位上方都有对应监控器, 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开 : 给出某一

    2024年02月14日
    浏览(40)
  • 前端新员工入职,需要为你的新电脑安装一些环境,开发工具

    目录 一.先安装个谷歌浏览器,稳定版。 二.安装公司日常交流软件 三.安装个VSCode 四.安装nvm 五.vue-cli的安装和配置 六.安装git 配置git账号 拉取线上仓库到本地 一些常用git命令 GitLab配置公钥私钥  七.其他工具 网络抓包工具:whistle 反向代理工具:nginx 调试接口工具:postma

    2024年02月06日
    浏览(56)
  • 你的设备遇到问题,需要重启;我们只收集某些错误信息,然后为你重新启动。

    VMware安装centos和打开其他虚拟机时电脑蓝屏报错: 你的设备遇到问题,需要重启;我们只收集某些错误信息,然后为你重新启动。 我的解决办法:开启Windows的虚拟机平台 打开控制面板,点击“程序”,点击“启用或关闭windows功能”,勾选“虚拟机平台”

    2024年02月11日
    浏览(220)
  • 因为文件共享不安全,所以你不能连接到文件共享。此共享需要过时的SMB1协议,而此协议是不安全的,可能会使你的系统遭受攻击。你的系统需要SMB2或更高版本。

    因为文件共享不安全,所以你不能连接到文件共享。此共享需要过时的SMB1协议,而此协议是不安全的,可能会使你的系统遭受攻击。你的系统需要SMB2或更高版本。有关如何解决此问题的信息,请参见:https://go.microsoft.com/fwlink/?linkid=852747 以下的方法你们可以试一下可以不,我

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包