倍增Floyd「建议收藏」

倍增Floyd有这样的一道题:给定一张图,求其中恰好经过mm条边的路径的长度最小值。(n<=200,m<=109)(n<=200,m<=10^9)对于这种题型,可以使用倍增Floyd求解。由于Floyd算法的奇特性质:每次加入一个点进行更新。如果我们把它改写为:for(inti=0;i<=n;i++)for(intj=0;j<=n;j++)for(intk=

大家好,又见面了,我是你们的朋友全栈君。

有这样的一道题:

给定一张图,求其中恰好经过 m 条边的路径的长度最小值。

(n<=200,m<=109)

对于这种题型,可以使用倍增Floyd求解。

由于Floyd算法的奇特性质:每次加入一个点进行更新。如果我们把它改写为:

for(int i=0;i<=n;i++)
    for(int j=0;j<=n;j++)
        for(int k=0;k<=n;k++)
            check(d[i][j],d[i][k]+d[k][j]);

那么这得到的就是经过两条边的最短距离的,同样的,我们就可以将这个拓展为倍增,就可以解决这个问题了。附上部分代码。

(黄学长的代码写的真飘逸,学习了)

struct Floyd{
    int d[N][N];
    Floyd(){
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                d[i][j]=INF;
    }
    Floyd operator *(const Floyd &a)const{
        Floyd res;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                for(int k=1;k<=n;k++)
                    check(res.d[i][j],d[i][k]+a.d[k][j]);
        return res;
    }
}ans,A;
void solve(){
    Init();//A设为原图
    while(m){
        if(m&1)ans=ans*A;
        A=A*A;
        m>>=1;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127096.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux netstat命令详解

    Linux netstat命令详解简介Netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态(InterfaceStatistics),masquerade连接,多播成员(MulticastMemberships)等等。输出信息含义执行netstat后,其输出结果为ActiveInternetconnections(w/oservers)ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp02210.34.6.

    2022年5月30日
    32
  • 【C#基础】-Substring截取字符串的方法小结

    【C#基础】-Substring截取字符串的方法小结前言    在公司的图书馆项目中曾经用过截取字符串的方法,项目是java语言的;最近在公司的另一个项目中又需要截取字符串,一种环境是C#语言,一种环境是SQLServer存储过程;先来说一下后台程序中截取字符串的方法。正文c#中截取字符串主要是借助Substring这个函数。stringstring.Substring(intstartIndex,intlength)

    2022年5月10日
    35
  • 计算机网络曼彻斯特编码与差分曼彻斯特编码

    计算机网络曼彻斯特编码与差分曼彻斯特编码曼彻斯特编码与差分曼彻斯特编码 1 两种编码在中间均需要进行一次跳变 2 曼彻斯特编码 吉大原则为负到正为 1 正到负为 0 3 差分曼彻斯特编码 为 0 时发生跳变 为 1 时不发生跳变 在此处跳变的含义为中间虚线位置 若当前为 1 则与前一个编码的后半部分电平相同 若为 0 则与前一个编码的后半部分电平相反 4 对于差分曼彻斯特编码 第一个位置需自己决定 一般选择不同 从边界直着下来

    2025年10月14日
    6
  • GCC 命令格式

    GCC 命令格式GCC命令格式gcc[options][filenames]常用选项含义-E只做预处理-c只编译不链接,生成目标文件“.o”-S生成汇编代码-ofile把输出生成到由file指定文件名的文件中-g在输出的文件中加入支持调试的信息-v显示输出详细的命令执行过程信息GCC的主要执行步骤ELF介绍1.ELF简介注:以上内容来源于:https://www.bilibili.com/video/BV1Q5411w7z5?p=5

    2022年10月13日
    2
  • 12306自动刷票下单-登录篇(一)

    12306自动刷票下单-登录篇(一)12306网站推出图片验证码以后,对于抢票软件就提出了更高的要求,本篇并不涉及自动识别验证码登录(主要是博主能力所限),提供一个途径-打码平台,这个几乎是可以激活成功教程所有验证码了,本篇主要是分享一下12306网站登录的流程的学习,勿吐槽,有问题请指正,博主也是刚开始接触爬虫,大家共勉共勉。废话不多说了,直接干吧 首先打开12306登录页面https://kyfw.12306.cn/otn/login/…

    2025年8月15日
    4
  • C++ – 实现strstr函数

    C++ – 实现strstr函数分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net/**CreatedbyChimomo**函数名:strStr*功能:找出字符串str2在字符串str1中第一次出现的位置(不包括str2的串结束符)。*返回值:若找到,返回指向该位置的指针;否则,返回空指针。…

    2022年6月25日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号