题目链接:点击查看

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

题目分析:虽然点的编号在1e3以内,却只有100条边,我们可以离散化,这样最多只需要一个200*200的邻接矩阵就可以维护了,离散化后我们考虑maze储存了邻接矩阵,则dp[i][j]=min(maze[i][k]+maze[k][j]),dp[i][j]表示的是点i和点j经过了一条边的最短路,这样我们可以将整个数组上升至三维空间,dp[k][i][j]代表的是点i到点j经过了k个点后的最短路,转移方程为:

dp[k][i][j]=min(dp[x][i][t]+dp[k-x][t][j])  (t为连接点i和点j的中间点)

这样一来就可以用矩阵快速幂优化了,只不过需要将矩阵乘法改成取加法运算,矩阵加法改成取min运算,每次都由第k-1层转移到第k层,最后答案就是dp[k][st][ed]了,因为每次的空间都可以滚动使用,所以第一维的k并不需要真实体现出来,这只是一种思维的体现,实际实现的过程中完全可以省略掉

最后注意一下每条边的输入格式是w u v,太恶心人了吧?调了一个小时

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=210;struct Edge
{int u,v,w;void input(){scanf("%d%d%d",&w,&u,&v);//注意输入格式}
}edge[N];int n;vector<int>v;//离散化用 int get_id(int x)//获得离散化后的映射
{return lower_bound(v.begin(),v.end(),x)-v.begin();
}struct Ma
{int a[N][N];Ma(){memset(a,inf,sizeof(a));}friend Ma operator*(const Ma& a,const Ma& b){Ma ans;for(int i=0;i<v.size();i++)for(int j=0;j<v.size();j++){ans.a[i][j]=inf;for(int k=0;k<v.size();k++)ans.a[i][j]=min(ans.a[i][j],a.a[i][k]+b.a[k][j]);}return ans;}
};Ma q_pow(Ma a,int b)
{Ma ans=a;while(b){if(b&1)ans=ans*a;a=a*a;b>>=1;}return ans;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int k,n,st,ed;scanf("%d%d%d%d",&k,&n,&st,&ed);Ma ans;for(int i=1;i<=n;i++){edge[i].input();v.push_back(edge[i].u);v.push_back(edge[i].v);}sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());for(int i=1;i<=n;i++){int x=get_id(edge[i].u);int y=get_id(edge[i].v);int w=edge[i].w;ans.a[x][y]=ans.a[y][x]=w;}ans=q_pow(ans,k-1);printf("%d\n",ans.a[get_id(st)][get_id(ed)]);return 0;
}

POJ - 3613 Cow Relays(Floyd思想+矩阵快速幂+动态规划)相关推荐

  1. 矩阵快速幂+动态规划=蓝桥杯 垒骰子

    矩阵快速幂+动态规划=蓝桥杯 垒骰子 如果还不知道什么是矩阵快速幂,可以参加我的另一篇文章:矩阵快速幂详解 题目 分析 看到 nnn 的范围达到了 10910^{9}109 ,如果使用暴力搜索是不现实 ...

  2. POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]

    http://poj.org/problem?id=2778 题意:给一些只由ACGT组成的模式串,问有多少种长度为n且不含有给出的模式串的DNA序列. 自动机的状态转换可以看成一个有向图(有重边的) ...

  3. POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)

    题目链接:点击查看 题目大意:给出 n 个长度不大于 10 的字符串表示病毒串,再给出一个长度 len ,问长度为 len 的字符串中,有多少个字符串不含有病毒串作为子串 题目分析:因为病毒串的长度和 ...

  4. POJ 3233 Matrix Power Serie (矩阵快速幂)

    Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + - + Ak. ...

  5. POJ 3613 Cow Relays (floyd + 矩阵高速幂)

    题目大意: 求刚好经过K条路的最短路 我们知道假设一个矩阵A[i][j] 表示表示 i-j 是否可达 那么 A*A=B  B[i][j]  就表示   i-j 刚好走过两条路的方法数 那么同理 我们把 ...

  6. I-Matrix Power Series POJ - 3233 矩阵快速幂+分治

    I-Matrix Power Series POJ - 3233 矩阵快速幂+分治 Problem Description Given a n × n matrix A and a positive ...

  7. H - Fibonacci POJ - 3070 (矩阵快速幂)

    H - Fibonacci POJ - 3070 (矩阵快速幂) Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and ...

  8. POJ 3070 Fibonacci(矩阵快速幂入门、模板)

    ? 题目链接:http://poj.org/problem?id=3070 ?   这题就是让求斐波那契数列的第n项,但是题目中n很大,所以打表和直接求都会TLE,对于这个题我们可以用矩阵快速幂,下面 ...

  9. BZOJ.4180.字符串计数(后缀自动机 二分 矩阵快速幂/倍增Floyd)

    题目链接 先考虑 假设S确定,使构造S操作次数最小的方案应是:对T建SAM,S在SAM上匹配,如果有S的转移就转移,否则操作数++,回到根节点继续匹配S.即每次操作一定是一次极大匹配. 简单证明:假设 ...

最新文章

  1. 比较两个二维数组是否相等
  2. DTC精彩回顾—王义成:国产数据库技术发展的探索与思考
  3. Oryx 2.1.2版本: src源码编译
  4. 用决策树模型求解回归问题(regression tree)
  5. MySQL数据库(10)----IN 和 NOT IN 子查询
  6. 在禁用视图状态的情况下仍然使用ViewState对象
  7. [转载]《博客园精华集》WebService筛选结果(共79篇)
  8. Java语言中的泛型
  9. 修改JDK的经历:两处字体的粗体代码引起的错误
  10. android+ios打印机,Android/iOS手机安装HP打印机的详细方法和操作步骤
  11. layabox 打印_Layabox 集成指南
  12. 关于能力模型的思考总结
  13. 明尼苏达大学双城分校计算机科学,UMN的CS「明尼苏达大学双城分校计算机科学与工程系」...
  14. 如何搞定 K8S 微服务自动化发布系统
  15. 数据库MySQL入门-下
  16. 下载B(bilibili)站视频
  17. 如何在Windows 7中将管理工具添加到开始菜单
  18. ACM基本算法类题目
  19. 程序员自我修养——提问的智慧
  20. 看完 2022 雷军年度演讲,我总结了我的故事

热门文章

  1. c语言程序设计B试题,c语言程序设计期末试题B(含答案)Word版
  2. MySQL高级 - 锁 - MyISAM表锁 - 查看锁争用情况
  3. Protobuf序列化的原理-存储格式
  4. 高仿真的类-业务逻辑注入接口
  5. 如何将BeanDefinition注册到IoC容器?
  6. http通信协议的基本原理
  7. maven的java工程取mysql数据库数据
  8. SpringIOC容器介绍
  9. jQuery版本的网页开关灯、jQuery版本网页开关灯的另一种写法
  10. ThreadLocal以及增强