洛谷 P1613 跑路 (倍增 + DP + 最短路)
题目链接:P1613 跑路
题意
给定包含 \(n\) 个点和 \(m\) 条边的有向图,每条边的长度为 \(1\) 千米。每秒钟可以跑 \(2^k\) 千米,问从点 \(1\) 到点 \(n\) 最少需几秒。
思路
倍增 DP Floyd
令 \(dp[i][j][k]\) 表示从 \(i\) 到 \(j\) 是否存在长度为 \(2^k\) 的路径。
那么如果 \(dp[i][t][k - 1]\) 和 \(dp[t][j][k - 1]\) 都为 \(1\) 则 \(dp[i][j][k]\) 为 \(1\)。此时可以用边权为 \(1\) 的边将点 \(i\) 和点 \(j\) 连起来。
最后跑一遍最短路即可。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e2 + 10;
ll dp[maxn][maxn][maxn];
ll dis[maxn][maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
memset(dis, 0x3f, sizeof(dis));
int n, m;
cin >> n >> m;
for(int i = 0; i < m; ++i) {
int x, y;
cin >> x >> y;
dp[x][y][0] = 1;
dis[x][y] = 1;
}
for(int x = 1; x <= 64; ++x) {
for(int k = 1; k <= n; ++k) {
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= n; ++j) {
if(dp[i][k][x - 1] && dp[k][j][x - 1]) {
dp[i][j][x] = 1;
dis[i][j] = 1;
}
}
}
}
}
for(int k = 1; k <= n; ++k) {
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= n; ++j) {
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
}
}
}
cout << dis[1][n] << endl;
return 0;
}
洛谷 P1613 跑路 (倍增 + DP + 最短路)的更多相关文章
- 洛谷P1613 跑路(最短路+倍增)
P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...
- 洛谷P1613 跑路
P1613 跑路 176通过 539提交 题目提供者该用户不存在 标签倍增动态规划 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 这个题的数据.. 题意问题 表意 题目描述 小A的工作不仅繁 ...
- 洛谷 P1613 跑路 解题报告
P1613 跑路 题目描述 小\(A\)的工作不仅繁琐,更有苛刻的规定,要求小\(A\)每天早上在\(6:00\)之前到达公司,否则这个月工资清零.可是小\(A\)偏偏又有赖床的坏毛病.于是为了保住自 ...
- 洛谷——P1613 跑路
P1613 跑路 题目大意: 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B ...
- 洛谷 P1613 跑路 题解
P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...
- 洛谷P1613 跑路 图论
正解:倍增+图论 解题报告: 传送门! 话说这题是真滴很妙啊,,,大概港下QwQ 首先看懂这道题,它是说,只要是1<<k的都能1s跑过,而且每条边的长度都是1,就是说一秒可以跑过1< ...
- 洛谷1613 跑路 倍增 + Floyd
首先,我们一定要认识到本题中的最短时间所对应的道路不一定是在起点到终点的最短路.例如,起点到终点的最短路为 151515 ,那么对 151515 进行二进制拆分的话是 111111111111 ,这时 ...
- P1613 跑路 倍增思想 + 邻接矩阵
题意 给定一个有向图,每条边的花费为1.现在有一个空间跑路器,可以走2^k长度的路,只用花1秒的时间.问从1走到n最少的时间.n <= 50, k <= 64. 思路 这道题说是倍增,但是 ...
- P1613 跑路——倍增思想,floyd
https://www.luogu.org/problemnew/show/P1613 他有一个跑路机器,每次只能跑2k (单位)路程,每相邻两个点的路程为1,也就是说如果连边1——>2—— ...
随机推荐
- hasvalue vs !=null
Which is preferred: Nullable<T>.HasValue or Nullable<T> != null? The compiler replaces n ...
- PHP使用引用变量foreach时,切记其他循环不要使用同一个名字的变量
foreach ($log['data'] as $k => &$value) { if ($value['token'] != 0) { $value['change_num'] = ...
- HTML5: HTML5 WebSocket
ylbtech-HTML5: HTML5 WebSocket 1.返回顶部 1. HTML5 WebSocket WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 ...
- angular.js实现二级tab切换
<div class="guide-type"> <h3 ng-class="{true:'active', false:''}[tab == 'pc' ...
- Spring Cloud注册中心高可用搭建
Spring Cloud的注册中心可以由Eureka.Consul.Zookeeper.ETCD等来实现,这里推荐使用Spring Cloud Eureka来实现注册中心,它基于Netfilix的Eu ...
- springboot整合jsp 遇到的问题
1,在idea中新建jsp文件 首先需要在springboot项目 在src 中webapp /WEB-INF/JSP 当我右键想新建一个jsp文件时默认没有 File->Project Str ...
- bootstrap学习(五)代码
内联代码: <code>public static</code>void main 用户输入: to edit setting,press <kbd><kbd ...
- PyCharm与git/GitHub取消关联
如果你从github 上down下的个项目,用pycharm 打开的时候,选择了git管理,导致你只要做了修改,就会有颜失标记,即使没有强迫症,看着也很难受啊 聪敏的我赶快找度娘,总结如下解决方法 在 ...
- bat批处理----copy和xcopy区别
copy和xcopy区别:两者都可以赋值文件 1.copy不能在有子目录存在的文件中拷贝文件的同时重命名此文件名 2.copy命令能合并两个文件,而xcopy不能
- vue $attrs 父组件和孙子组件的传值,传函数
上一篇我们说到provide/inject的依赖注入的传值方法,今天我们来说一下另一个父组件给孙子组件的传值方式$attrs 我们接着上一个例子继续来写 parent父组件 我们给child子组件穿了 ...