博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3613 Cow Relays
阅读量:7110 次
发布时间:2019-06-28

本文共 1116 字,大约阅读时间需要 3 分钟。

题意:求经过K条边 S和E点之间的最短路。

思路:floyd通过一个点k去更新i j两点的距离。那么N-1次floyd则通过N-1个点来更新i j之间的距离那么在i j中间恰好N条边。

        首先需要离散化点。然后用类似于快速幂的方法进行floyd,把加的操作换成松弛操作。

#include 
#include
#include
#include
#include
#include
using namespace std;const int INF=0x3f3f3f3f;const int MAXN=110;map
Map;int N,T,S,E;struct Matrix{ int m[MAXN][MAXN]; Matrix() { memset(m,-1,sizeof(m)); }};Matrix mtMul(Matrix A, Matrix B){ int i, j, k, tmp; Matrix C; for(i = 0; i < Map.size(); i ++) for(j = 0; j < Map.size(); j ++) for(k = 0; k < Map.size(); k ++) { if(A.m[i][k] == -1 || B.m[k][j] == -1) continue; tmp = A.m[i][k] + B.m[k][j]; if(C.m[i][j] == -1 || C.m[i][j] > tmp) C.m[i][j] = tmp; } return C;}Matrix mtPow(Matrix A, int k){ if(k == 1) return A; Matrix B = mtPow(A, k / 2); if(k % 2 == 0) return mtMul(B, B); else return mtMul(mtMul(B, B), A);}int main(){ while(scanf("%d%d%d%d",&N,&T,&S,&E)!=EOF) { int cnt=0; Map.clear(); int u,v,w; Matrix G; for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/onlyAzha/p/4755285.html

你可能感兴趣的文章
Vue2.0源码阅读笔记(一):选项合并
查看>>
git - 常用命令
查看>>
一个NSObject对象占多少内存呢?
查看>>
深入学习js之——参数按值传递#9
查看>>
Jackson使用指南
查看>>
Kotlin1.3 协程Api详解:CoroutineScope, CoroutineContext
查看>>
产品思维
查看>>
Flutter 入门指北(Part 2)之基础部件
查看>>
关于前端脚本异常监控的思考
查看>>
Observer源码解析
查看>>
java获取B站弹幕文件的两种方案
查看>>
常用Json工具类
查看>>
数据类型,及深拷贝
查看>>
在 iOS 中使用 GLSL 实现抖音特效
查看>>
Android无障碍:通过Java设置contentDescription (GridView item)
查看>>
【Javascript】探究javascript中的堆/栈/任务队列与并发模型 event loop的关系
查看>>
《Miss Talk》第04期:对话凯叔讲故事 曲艳颂
查看>>
基于React Native和Ethers.js的电子钱包(二):路由和导航
查看>>
深入理解OSGi类加载机制
查看>>
dva-plugin-common发布.
查看>>