poj3613Cow Relays 矩阵快速幂
来源:互联网 发布:ios socket多线程编程 编辑:程序博客网 时间:2024/05/21 07:07
矩阵+快速幂。用矩阵做floyd。
由于一定要走K步,如果用dp[][]来表示的话就是,dp[i][ed]=min(dp[i][ed],dp[i][j]+val[j->ed]);
由于原图不会改变,所以dp[i]和dp[i-1]更新效果也是一定的,所以我们可以用快速幂来降低图的遍历次数。
然后快速幂的“1”矩阵与常规的不一样,由于“1”矩阵的作用是让所有矩阵乘以它后值不变,本题中矩阵乘法的定义有所改变,所以不能定义为只有对角线上都是1的普通“1”矩阵。假设极端情况,如果只走一步的话那么就应该是原图,
为了不改变原图,所以“1”矩阵的对角线应该为0 其他值为INF。
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <map>using namespace std;map<int,int>mmap;int n;struct matrix{ int a[110][110];}org,res,tmp;matrix operator * (matrix x,matrix y){ matrix c; memset(c.a,0x3f3f3f3f,sizeof(c.a)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { for(int k=1;k<=n;k++) { c.a[i][j]=min(c.a[i][j],x.a[i][k]+y.a[k][j]); } } } return c;}matrix solve(matrix A,int k){ memset(res.a,0x3f3f3f3f,sizeof (res.a)); for(int i=1;i<=n;i++) res.a[i][i]=0; while(k) { if(k&1)res=res*A; A=A*A; k>>=1; } return res;}int main(){ int k,m,s,e; int x,y,z; while(~scanf("%d%d%d%d",&k,&m,&s,&e)) { memset(org.a,0x3f3f3f3f,sizeof(org.a)); mmap.clear(); int num=0; for(int i=1;i<=m;i++) { scanf("%d%d%d",&z,&x,&y); if(!mmap[x]) mmap[x]=++num; if(!mmap[y]) mmap[y]=++num; int l=mmap[x]; int r=mmap[y]; org.a[l][r]=org.a[r][l]=z; } n=num; matrix ans=solve(org,k); printf("%d\n",ans.a[mmap[s]][mmap[e]]); } return 0;}
0 0
- poj3613Cow Relays 矩阵快速幂
- POJ 3613 Cow Relays (floyd + 矩阵快速幂)
- poj 3613Cow Relays (矩阵乘法 快速幂)
- POJ 3613 Cow Relays(矩阵模板+快速幂+floyd)
- poj3613Cow Relays (经过n条边的最短路)
- poj 3613 Cow Relays (K步最短路+Floyd+矩阵快速幂)
- poj 3613 Cow Relays (floyd+矩阵快速幂+坐标离散化)
- POJ 3613 Cow Relays (Floyd + 矩阵快速幂 + 离散化 神题!)
- POJ 3613 Cow Relays k步最短路 (floyd + 矩阵快速幂)
- POJ 3613 Cow Relays floyd + 快速幂
- POJ 3613 Cow Relays floyd+快速幂
- poj 3613 Cow Relays (floyd快速幂)
- Poj 3613 Cow Relays【Floyd+快速幂】
- 【Floyd求最短路+快速幂】PKU-3613-Cow Relays
- POJ 3613 Cow Relays Floyd+快速幂加速
- POJ题目3613 Cow Relays(Floyd+快速幂)
- POJ-3613-Cow Relays-矩阵
- 快速矩阵快速幂
- 通过 Informix 系统表监控和优化数据库
- Android Runtime
- 安卓学习笔记(十一)资源汇总
- hdu 1129 Do the Untwist
- android 源码下载操作
- poj3613Cow Relays 矩阵快速幂
- 对众测平台的深度分析
- mysql提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
- 支持向量机通俗导论(理解SVM的三层境界)
- 数位dp 学习指南
- HYSBZ 1406 密码箱
- 用mkfs.jffs2 命令制作jffs2镜像文件
- CentOS虚拟机安装SAMBA服务器 实现与Windows宿主机文件共享
- python软件工程师面试题