Poj 3613 Cow Relays(floyd的矩阵快速幂)
发布日期:2021-06-30 10:24:45
浏览次数:2
分类:技术文章
本文共 1110 字,大约阅读时间需要 3 分钟。
非常 n b nb nb的一道题
假如求方案数,那么可以定义 f [ i ] [ j ] f[i][j] f[i][j]为 i i i次到 j j j的方案数
可以得到 f [ i + 1 ] [ v ] + = f [ i ] [ j ] f[i+1][v]+=f[i][j] f[i+1][v]+=f[i][j]
所以可以以01邻接矩阵作矩阵快速幂得到方案数.
然后这里的权值也是同样的道理
假如现在得到了经过 x x x个点的最短路,求经过 x + y x+y x+y个点的最短路
那么只需要有经过 y y y个点的最短路即可
这样加起来就经过了 x + y x+y x+y个点
所以把邻接矩阵同时作为初始矩阵和递推矩阵开始递推
#include#include #include using namespace std;int f[1000009],id;struct matrix{ int m[209][209]; matrix(){ memset(m,0x3f3f3f3f,sizeof m); }};matrix operator * (matrix a,matrix b){ matrix ans; for(int k=1;k<=id;k++) for(int i=1;i<=id;i++) for(int j=1;j<=id;j++) ans.m[i][j] = min( ans.m[i][j],a.m[i][k]+b.m[k][j] ); return ans;}matrix quick(matrix x,int n){ matrix ans = x; while( n ) { if( n&1 ) ans = ans*x; n >>= 1; x = x*x; } return ans;}int main(){ int n,t,s,e; cin >> n >> t >> s >> e; matrix ans; for(int i=1;i<=t;i++) { int w,l,r; cin >> w >> l >> r; if( !f[l] ) f[l] = ++id; if( !f[r] ) f[r] = ++id; ans.m[f[l]][f[r]] = ans.m[f[r]][f[l]] = min( ans.m[f[l]][f[r]],w ); } ans = quick( ans,n-1 ); cout << ans.m[f[s]][f[e]];}
转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/110007543 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月26日 04时28分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
单目深度估计 monodepth2模型 代码
2019-04-30
位图索引Bitmap indexes
2019-04-30
YOLO算法(二)—— Yolov2 & yolo9000
2019-04-30
YOLO算法(三)—— Yolov3 & Yolo系列网络优缺点
2019-04-30
Python的__future__模块
2019-04-30
计算机视觉中的cost-volume的概念具体指什么(代价体积)
2019-04-30
启发函数heuristic 与 A*
2019-04-30
Image Pyramid(图像金字塔)
2019-04-30
Oracle 作业记录
2019-04-30
putty连接AWS配置(multimedia project)
2019-04-30
Hourglass Network 沙漏网络 (pose estimation姿态估计)
2019-04-30
OpenCV实战(二)——答题卡识别判卷
2019-04-30
目标检测神经网络的发展历程(52 个目标检测模型)
2019-04-30
Boundary loss 损失函数
2019-04-30
tensorflow使用tensorboard进行可视化
2019-04-30