草庐IT

「最短路」农场派对

孤星·璀璨 2023-03-28 原文

本题为1月4日22寒假集训每日一题题解

题目来源:(未知)

题面

题目描述

N(1<=N<=1000)头牛要去参加一场在编号为x(1<=x<=N)的牛的农场举行的派对。有M(1<=M<=100000)条有向道路,每条路长 Ti(1<=Ti<=100);每头牛都必须参加完派对后回到家,每头牛都会选择最短路径。求这N头牛的最短路径(一个来回)中最长的一条的长度。

特别提醒:可能有权值不同的重边。

输入

第1行:

3个空格分开的整数N,M,X;

第2…M+1 行:
33 个空格分开的整数Ai,Bi,Ti,表示有一条从Ai到Bi的路,长度为Ti。

输出

一行一个数,表示最长最短路的长度。

样例输入

4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3

样例输出

10

思路分析

显然这是多源最短路问题,可以通过多次使用dijkstra算法解决.

不过此题的数据量是一个稠密图,我个人估了一下,虽然有点悬,但是或许可以使用写起来相对简单的Floyd算法,且Floyd算法本身就是用来解决多源最短路问题的.尝试了一下后发现,可以正好卡着时间界过去,所以就没有写dijkstra算法了.

参考代码

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3, "Ofast", "inline")

#include <iostream>
#include <queue>
#include <cstring>

using namespace std;

int g[1010][1010]; // 邻接矩阵,用vector会TLE

int main()
{
    ios::sync_with_stdio(false);

    int n, m, x;
    cin >> n >> m >> x;

    memset(g, 0x3f, sizeof(g)); // 默认值设置为无穷大

    while (m--)
    {
        int a, b, t;
        cin >> a >> b >> t;
        g[a][b] = min(g[a][b], t);
    }

    for (int i = 1; i <= n; i++)
    {
        g[i][i] = 0; // 自己到自己的距离为0
    }

    // floyd算法
    for (int k = 1; k <= n; k++)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
            }
        }
    }

    // 遍历每一个点,找最长的最短路
    int res = 0;
    for (int i = 1; i <= n; i++)
    {
        res = max(res, g[i][x] + g[x][i]);
    }

    cout << res << "\n";

    return 0;
}

"正是我们每天反复做的事情,最终造就了我们,优秀不是一种行为,而是一种习惯" ---亚里士多德

有关「最短路」农场派对的更多相关文章

  1. Ruby 惯用法短路返回第一个非零使用每个和映射 - 2

    这是我正在尝试做的事情的本质,但“中断”不正确:needle=nilhaystacks.eachdo|haystack|needle=haystack.look_for_needle()breakifneedleend这更短,但它会遍历每个干草堆(至少不看),即使它不需要:needle=nilhaystacks.eachdo|haystack|needle||=haystack.look_for_needle()end这是一个单行代码,但(我相信)它并不懒惰,所以它做了不必要的工作:needle=hackstacks.map{|h|h.look_for_needle()}.detect

  2. javascript - 使用短路运算符抛出错误 - javascript - 2

    我知道jslint/jshint不喜欢它,但我想知道做类似的事情是否有任何真正的问题。varerr=function(msg){thrownewError(msg);};示例1:赋值varfoo=bar.foo||baz.foo||err('missingfooproperty');示例2:验证typeoffoo['bar']!=='string'&&err('barhastobeastring');有什么我应该注意的问题吗? 最佳答案 据我所知,这与PHP中的或die()一样错误。运算符的短路性是明确定义的,因此只有在达到最后一种

  3. javascript - 如何避免 JavaScript 中的短路求值? - 2

    我需要执行&&语句的两边,但如果第一部分返回false则不会发生这种情况。示例:functiondoSomething(x){console.log(x);}functioncheckSomething(x){varnot1=x!==1;if(not1)doSomething(x);returnnot1;}functioncheckAll(){returncheckSomething(1)&&checkSomething(3)&&checkSomething(6)}varallValid=checkAll();//Logsnothing,returnsfalse这里的问题是doSome

  4. javascript - 为什么当运算符优先级表明短路评估不应该时短路评估会起作用? - 2

    在JavaScript和Java,等于运算符(==或===)的优先级高于OR运算符(||)。然而,这两种语言(JS、Java)都支持if语句中的短路:当我们有if(true||anything())时,不会评估anything()。您还可以使用以下表达式:true||foo==getValue())-例如在诸如console.log(...);之类的输出语句中,或在赋值中。现在,根据运算符优先级,短路不应该发生,因为======>||在优先条款。(换句话说,应该首先进行比较,为此应该调用getValue(),因为相等性检查的优先级高于OR比较。)但确实如此。getValue()未被调用

  5. 华为OD机试用Python实现 -【农场施肥】(2023-Q1 新题) - 2

    华为OD机试题华为OD机试300题大纲农场施肥题目描述输入描述输出描述备注示例一输入输出说明示例二输入输出说明Python代码实现本题包含的算法思路华为OD机试300题大纲参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。华为OD清单查看地址:

  6. javascript - 允许短路评估中的零值 - 2

    短路评估确定第一个值是否为假。如果是,则返回第二个值,如下:varx=y||z;//ifyisfalseyreturnz在不借助if/else语句或三元运算符的情况下使用短路评估时,有没有办法将零值视为错误? 最佳答案 您可以先检查y是否不等于零,然后取数值并得到y默认值z的结果.x=+(y!==0)&&(y||z)Howitworks:expressionypartresultresultcomment-----------------------------------------------------------------

  7. javascript - 带有返回语句的短路 - 2

    据我了解,使用逻辑AND&&运算符进行短路的工作方式如下:假设我有表达式a和b那么a&&b和a一样吗?b:a因为如果a为真则结果为b并且如果a是假的,那么结果将是a(甚至不尝试解析b)既然如此,为什么以下(演示)代码会抛出SyntaxError:varadd=function(a,b){b&&returna+b;//if(b)returna+b...}有没有办法用return语句短路? 最佳答案 &&二元运算符需要两部分都是表达式。returnsomething是一个语句而不是一个表达式(它不产生一个值,因为函数结束时值将没有用)。

  8. ONLYOFFICE中利用chatGPT帮助我们策划一场生日派对 - 2

        近日,人工智能chatGPT聊天机器人爆火,在去年年底发布后,仅仅两个月就吸引了全球近一亿的用户,成为史上最快的应用消费程序,chatGPT拥有强大的学习和交互能力可以被学生,教师,上班族各种职业运用于日常工作,和生活场景如果用户提出不当需求或问题,chatGPT还回给与拒绝或者在回答中绕开敏感问题,因此chatGPT被称为全球最强人工智能ONLYOFFICE  ONLYOFFICE是一款开源免费的办公软件,具备优秀文本文档,电子表格,演示文稿和在线表单模板四合一的模式,强势更新后的7.3版本,添加了chatGPT该项功能的插件,接下来就给大家看一下利用chatGPT怎样帮我们策划一场

  9. 用栈求解迷宫问题的所有路径及最短路径程序(纯c语言) - 2

    参考了这个博客学校作业,在各种地方搜了半天,看别人的要么就是有点错,要么就是很复杂用了不少我不知道的库,还要么就是只求了一条路径,还要么就是用了c++没学过。写了半天,写出了一个应该是比较简单的方法,应该是还能优化,不过作业能跑就行,懒得搞了。有更好的想法,欢迎交流。----------------------------------------------------------------------------------------正文讲讲思路吧,首先定义一下迷宫的方块typedefstruct{ inti;//行intj;//列intdi;//探索方向}box;再定义一下栈typed

  10. java - 使用java时在windows上获取 '~'的短路径 - 2

    我创建了一个java应用程序,它可以将文件从在线源下载到我运行Windows7的本地计算机代码下载文件,但也为该文件创建一个路径,以便它可以存储在该路径中然后文件被转换成另一种格式我遇到的问题是,如果我使用绝对长路径导航到路径,Windows似乎不喜欢它我正在使用cmd导航到文件,这意味着我正在创建进程来执行此操作我的代码是这样的String[]command={"cmd",};Processp;try{p=Runtime.getRuntime().exec(command);newThread(newSyncPipe(p.getErrorStream(),System.err)).s

随机推荐