题目大意:

求刚好经过K条路的最短路

我们知道假设一个矩阵A[i][j] 表示表示 i-j 是否可达

那么 A*A=B  B[i][j]  就表示   i-j 刚好走过两条路的方法数

那么同理

我们把i-j 的路径长度存到A 中。

在A*A的过程中,不断取小的。那么最后得到的也就是i - j 走过两条路的最短路了。

当然也是利用到了floyd的思想。

然后要求出K次的最短路。那么就是矩阵高速幂的工作了。

注意要离散化。用map

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>using namespace std;
const int N = 101;
map<int,int>mymap;
struct matrix
{int a[N][N];
}temp,res,origin;
int n;
matrix mul(matrix x,matrix y)
{memset(temp.a,0x3f,sizeof temp.a);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=1;k<=n;k++)temp.a[i][j]=min(temp.a[i][j],x.a[i][k]+y.a[k][j]);return temp;
}matrix matmod(matrix A,int k)
{memset(res.a,0x3f,sizeof res.a);for(int i=1;i<=n;i++)res.a[i][i]=0;while(k){if(k&1)res=mul(res,A);A=mul(A,A);k>>=1;}return res;
}
int main()
{int k,m,s,e;while(scanf("%d%d%d%d",&k,&m,&s,&e)!=EOF){memset(origin.a,0x3f,sizeof(origin.a));mymap.clear();int num=0;for(int i=0;i<m;i++){int S,E,LEN;scanf("%d%d%d",&LEN,&S,&E);if(!mymap[S])mymap[S]=++num;if(!mymap[E])mymap[E]=++num;int l=mymap[S];int r=mymap[E];origin.a[l][r]=origin.a[r][l]=LEN;}n=num;matrix ans = matmod(origin,k);printf("%d\n",ans.a[mymap[s]][mymap[e]]);}return 0;
}

转载于:https://www.cnblogs.com/jzssuanfa/p/7341277.html

POJ 3613 Cow Relays (floyd + 矩阵高速幂)相关推荐

  1. POJ - 3613 Cow Relays(Floyd思想+矩阵快速幂+动态规划)

    题目链接:点击查看 题目大意:给定一张由T(T<=100)条边构成的无向图,点的编号为1~1000,之间的整数,求从起点S到终点E恰好经过N(N<=1e6)条边(可重复经过)的最短路 题目 ...

  2. HDOJ How many ways?? 2157【矩阵高速幂】

    How many ways? ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵高速幂)

    题目地址:http://codeforces.com/contest/551/problem/D 分析下公式能够知道,相当于每一位上放0或者1使得最后成为0或者1.假设最后是0的话,那么全部相邻位一定 ...

  4. hdu 5411 CRB and Puzzle 矩阵高速幂

    链接 题解链接:http://www.cygmasot.com/index.php/2015/08/20/hdu_5411/ 给定n个点 常数m 以下n行第i行第一个数字表示i点的出边数.后面给出这些 ...

  5. hdu 3221 Brute-force Algorithm(高速幂取模,矩阵高速幂求fib)

    http://acm.hdu.edu.cn/showproblem.php?pid=3221 一晚上搞出来这么一道题..Mark. 给出这么一个程序.问funny函数调用了多少次. 我们定义数组为所求 ...

  6. POJ 3660 Cow Contest [Floyd]

    POJ - 3660 Cow Contest http://poj.org/problem?id=3660 N (1 ≤ N ≤ 100) cows, conveniently numbered 1. ...

  7. mysql 最短路经_poj 3613 Cow Relays 经L边的最短路 | 学步园

    题意: 求无向图s,t点间经过L条边的最短路. 思路: 矩阵连乘求图中任意两点间的最短路不经常用,因为复杂度是N^3logN的,但这种 代码: //poj 3613 //sepNINE #includ ...

  8. HDOJ 5411 CRB and Puzzle 矩阵高速幂

    直接构造矩阵,最上面一行加一排1.高速幂计算矩阵的m次方,统计第一行的和 CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  9. A. chino with string(ac自动机+floyd矩阵快速幂)

    LINK 有mmm个字符串,每个字符串有一定的分值(可能为负数) 求出一个长nnn的字符串sss使得它的价值最大,你只需要输出这个最大的价值. 价值定义为∑i=1mcii∗pointi\sum\lim ...

最新文章

  1. repeater实现删除按钮
  2. Cocoapods的Podfile使用
  3. 小巧优美的ORM框架-doodads
  4. C++入门之常量与变量
  5. muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕
  6. jQuery在线手册
  7. .NET Core 3.1之深入源码理解HealthCheck(二)
  8. python 类继承和组合_python类与对象的组合与继承
  9. 握几次手就能拿下 HTTPS
  10. Win11更改微软应用商店下载路径
  11. 注册表java参数_Java通过CMD方式读取注册表任意键值对代码实践
  12. 苹果iphone公交卡支持哪些城市(详细)
  13. Access2016删除主键列(图文操作)错误提示:若要删除主键,请在“设计”视图中打开该表并删除主键字段
  14. 7-inch LCD 调试记录 DM6437
  15. 6个不亚于公务员的职业选择
  16. css如何选择同一个class下的第一个div?
  17. failed to push some refs to 'git@xxx.xxx.xxx.xxx:finger-shoot/shoot-admin.git'
  18. 内外网隔离下,通过网关转发,来部署前后端分离的系统
  19. MATLAB中eps使用
  20. Android的版本更新

热门文章

  1. stylus之关键字参数(Keyword Arguments)
  2. php超市结算,超市物品结算简易程序代码
  3. jackson java网络接口_java~jackson实现接口的反序列化
  4. This document is opened by another project error message
  5. GitLab结合Eclipse的简单使用 - 20190211
  6. Python 开篇及第一个Python程序
  7. Effective C++ 条款21
  8. Schema evolution in Avro, Protocol Buffers and Thrift
  9. 字符串拼接成insert语句[简单记录]
  10. C# 的Delegate(委托)