POJ 3613 Cow Relays (floyd + 矩阵高速幂)
题目大意:
求刚好经过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 + 矩阵高速幂)相关推荐
- POJ - 3613 Cow Relays(Floyd思想+矩阵快速幂+动态规划)
题目链接:点击查看 题目大意:给定一张由T(T<=100)条边构成的无向图,点的编号为1~1000,之间的整数,求从起点S到终点E恰好经过N(N<=1e6)条边(可重复经过)的最短路 题目 ...
- HDOJ How many ways?? 2157【矩阵高速幂】
How many ways? ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵高速幂)
题目地址:http://codeforces.com/contest/551/problem/D 分析下公式能够知道,相当于每一位上放0或者1使得最后成为0或者1.假设最后是0的话,那么全部相邻位一定 ...
- hdu 5411 CRB and Puzzle 矩阵高速幂
链接 题解链接:http://www.cygmasot.com/index.php/2015/08/20/hdu_5411/ 给定n个点 常数m 以下n行第i行第一个数字表示i点的出边数.后面给出这些 ...
- hdu 3221 Brute-force Algorithm(高速幂取模,矩阵高速幂求fib)
http://acm.hdu.edu.cn/showproblem.php?pid=3221 一晚上搞出来这么一道题..Mark. 给出这么一个程序.问funny函数调用了多少次. 我们定义数组为所求 ...
- POJ 3660 Cow Contest [Floyd]
POJ - 3660 Cow Contest http://poj.org/problem?id=3660 N (1 ≤ N ≤ 100) cows, conveniently numbered 1. ...
- mysql 最短路经_poj 3613 Cow Relays 经L边的最短路 | 学步园
题意: 求无向图s,t点间经过L条边的最短路. 思路: 矩阵连乘求图中任意两点间的最短路不经常用,因为复杂度是N^3logN的,但这种 代码: //poj 3613 //sepNINE #includ ...
- HDOJ 5411 CRB and Puzzle 矩阵高速幂
直接构造矩阵,最上面一行加一排1.高速幂计算矩阵的m次方,统计第一行的和 CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory ...
- A. chino with string(ac自动机+floyd矩阵快速幂)
LINK 有mmm个字符串,每个字符串有一定的分值(可能为负数) 求出一个长nnn的字符串sss使得它的价值最大,你只需要输出这个最大的价值. 价值定义为∑i=1mcii∗pointi\sum\lim ...
最新文章
- repeater实现删除按钮
- Cocoapods的Podfile使用
- 小巧优美的ORM框架-doodads
- C++入门之常量与变量
- muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕
- jQuery在线手册
- .NET Core 3.1之深入源码理解HealthCheck(二)
- python 类继承和组合_python类与对象的组合与继承
- 握几次手就能拿下 HTTPS
- Win11更改微软应用商店下载路径
- 注册表java参数_Java通过CMD方式读取注册表任意键值对代码实践
- 苹果iphone公交卡支持哪些城市(详细)
- Access2016删除主键列(图文操作)错误提示:若要删除主键,请在“设计”视图中打开该表并删除主键字段
- 7-inch LCD 调试记录 DM6437
- 6个不亚于公务员的职业选择
- css如何选择同一个class下的第一个div?
- failed to push some refs to 'git@xxx.xxx.xxx.xxx:finger-shoot/shoot-admin.git'
- 内外网隔离下,通过网关转发,来部署前后端分离的系统
- MATLAB中eps使用
- Android的版本更新
热门文章
- stylus之关键字参数(Keyword Arguments)
- php超市结算,超市物品结算简易程序代码
- jackson java网络接口_java~jackson实现接口的反序列化
- This document is opened by another project error message
- GitLab结合Eclipse的简单使用 - 20190211
- Python 开篇及第一个Python程序
- Effective C++ 条款21
- Schema evolution in Avro, Protocol Buffers and Thrift
- 字符串拼接成insert语句[简单记录]
- C# 的Delegate(委托)