P1613 跑路

题目描述

小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零。可是小A偏偏又有赖床的坏毛病。于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟可以跑2^k千米(k是任意自然数)。当然,这个机器是用longint存的,所以总跑路长度不能超过maxlongint千米。小A的家到公司的路可以看做一个有向图,小A家为点1,公司为点n,每条边长度均为一千米。小A想每天能醒地尽量晚,所以让你帮他算算,他最少需要几秒才能到公司。数据保证1到n至少有一条路径。

输入格式

第一行两个整数n,m,表示点的个数和边的个数。

接下来m行每行两个数字u,v,表示一条u到v的边。

输出格式

一行一个数字,表示到公司的最少秒数。

输入输出样例

输入 #1

4 4

1 1

1 2

2 3

3 4

输出 #1

1

说明/提示

【样例解释】

1->1->2->3->4,总路径长度为4千米,直接使用一次跑路器即可。

【数据范围】

50%的数据满足最优解路径长度<=1000;

100%的数据满足n<=50,m<=10000,最优解路径长度<=maxlongint。

【思路】

倍增 + 弗洛伊德(或其他最短路的算法)

先用倍增预处理出来两个点之间跳2^k能不能到达

处理的时候不像是跑倍增

有什么dfs什么的

可以类似弗洛伊德

从小到大枚举k,中间点和两个点

然后如果两个点到中间点都是需要 \(2^{k-1}\) 步就可以跑过去

那么这两个点之间就可以通过 \(2^k\) 跳过去

然后如果这两个点可以跳起来

那就可以用一个弗洛伊德常用的二维数组储存一下

距离为1

最后就可以跑弗洛伊德了

枚举中间点和两个点

如果两个点到中间点的距离和加起来小于两个点之间的直接距离

那就替换掉

输出f[1][n]就可以了

注意:

这是有向边!不要想当然的想成无向边!

【完整代码】

#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
const int Max = 55;
bool fa[Max][Max][34];
int n,m;
bool use[Max];
int f[Max][Max]; int main()
{
memset(f,9999,sizeof(f));
cin >> n >> m;
int u,v;
for(register int i = 1;i <= m;++ i)
{
cin >> u >> v;
f[u][v] = 1;
fa[u][v][0] = true;
}
for(register int l = 1;l <= 32;++ l)
for(register int k = 1;k <= n;++ k)
for(register int i = 1;i <= n;++ i)
for(register int j = 1;j <= n;++ j)
if(fa[i][k][l - 1] == true && fa[k][j][l - 1] == true)
fa[i][j][l] = true,f[i][j] = 1;
for(register int k = 1;k <= n;++ k)
for(register int i = 1;i <= n;++ i)
for(register int j = 1;j <= n;++ j)
if(i != k && j != k)
f[i][j] = min(f[i][j],f[i][k] + f[k][j]);
cout << f[1][n] << endl;
return 0;
}

最新文章

  1. 基础总结之Activity
  2. 解读ASP.NET 5 &amp; MVC6系列(3):项目发布与部署
  3. gulp基本介绍
  4. jquery失去焦点与获取焦点事件blur() focus()
  5. ztree设置节点checked
  6. SQL 查询优化
  7. ROS
  8. 想要风投被你的融资 PPT 打动吗?别忘了你其实就是在想方设法卖出自己公司的部分股权
  9. 高可用开源方案 Keepalived VS Heartbeat对比
  10. JavaScript正则表达式验证大全(收集)
  11. centos 7下安装python 3.6笔记
  12. python 自定义模块的发布和安装
  13. MySQL高可用之MHA的搭建
  14. vue数据修改 但未渲染页面
  15. Nginx 增加 Image 缩略图 功能
  16. 关于ie7下display:inline-block;不支持的解决方案。
  17. SQLSetStmtAttr
  18. UI5-学习篇-4-SCP-SAP WEB IDE登录
  19. Vue下拉刷新组件
  20. Python爬虫-爬取科比职业生涯高清图集

热门文章

  1. 作为一个纯粹数据结构的 Redis Streams
  2. [洛谷P5367]【模板】康托展开
  3. 阿里云最新Maven仓库地址 从此 我的maven依赖下载666~
  4. Springboot token令牌验证解决方案 在SpringBoot实现基于Token的用户身份验证
  5. 使用DOS命令登录管理员并添加账号管理员权限
  6. .net core使用ocelot---第六篇 负载均衡
  7. git便携版 添加git-bash到右键菜单
  8. 原生JS获取HTML DOM元素的8种方法
  9. GitHub上传文件夹
  10. iOS数组遍历