P1613 跑路

题目描述

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

输入输出格式

输入格式:

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

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

输出格式:

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

说明

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

\(100\)%的数据满足\(n<=50\),\(m<=10000\),最优解路径长度\(<=\) \(max\) \(long\) \(int\)。


首先,要确保自己的语文水平苟的住,这个鬼机器,每秒跑\(2^kkm\)的话是要跑刚好那么长的,不能多也不能少。

那么岂不是代表,只有长为\(2^kkm\)的链才算是有效边吗?

我们把所有有效边连上,跑最短路不就行了嘛。

如何求有效边?

\(2^k?\)有没有想到什么?

\(2^k=2^{k-1}+2^{k-1}?\)

对,就是倍增啊!

令\(g[u][v][j]\)代表点\(u\)到点\(v\)存在或不存在长度为\(2^j\)的边。

当\(g[u][k][j-1]\)和\(g[k][v][j-1]\)同时存在时,

\(g[u][v][j]\)存在。(\(k\)是枚举的一维)


#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int N=52;
int g[N][N][70],n,m;
//g[i][j][k]表示i点到j点存在边权为2^k的路
int g0[N][N];
int read()
{
int x=0;char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}
return x;
}
queue <int > q;
int used[N],dis[N];
void spfa()
{
memset(used,0,sizeof(used));
used[1]=1;
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
q.push(1);
while(!q.empty())
{
int u=q.front();
q.pop();
used[u]=0;
for(int v=1;v<=n;v++)
if(g0[u][v]&&dis[v]>dis[u]+g0[u][v])
{
dis[v]=dis[u]+g0[u][v];
if(!used[v])
{
used[v]=1;
q.push(v);
}
}
}
} int main()
{
memset(g,0,sizeof(g));
memset(g0,0,sizeof(g0));
n=read(),m=read();
int u,v;
for(int i=1;i<=m;i++)
{
u=read(),v=read();
g[u][v][0]=1;
//f[u][v][0]=v;
}
for(int j=1;j<=64;j++)
for(int k=1;k<=n;k++)
for(u=1;u<=n;u++)
for(v=1;v<=n;v++)
if(g[u][k][j-1]&&g[k][v][j-1])
g[u][v][j]=1;
for(u=1;u<=n;u++)
for(v=1;v<=n;v++)
for(int j=0;j<=64;j++)
if(g[u][v][j])
{
g0[u][v]=1;
break;
}
spfa();
printf("%d\n",dis[n]);
return 0;
}

2018.5.2

洛谷 P1613 跑路 解题报告的更多相关文章

  1. 洛谷P1613 跑路

    P1613 跑路 176通过 539提交 题目提供者该用户不存在 标签倍增动态规划 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 这个题的数据.. 题意问题 表意 题目描述 小A的工作不仅繁 ...

  2. 洛谷P1613 跑路(最短路+倍增)

    P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...

  3. 洛谷——P1613 跑路

    P1613 跑路 题目大意: 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B ...

  4. 洛谷 P1613 跑路 题解

    P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...

  5. 洛谷 P1613 跑路 (倍增 + DP + 最短路)

    题目链接:P1613 跑路 题意 给定包含 \(n\) 个点和 \(m\) 条边的有向图,每条边的长度为 \(1\) 千米.每秒钟可以跑 \(2^k\) 千米,问从点 \(1\) 到点 \(n\) 最 ...

  6. 洛谷P1613 跑路 图论

    正解:倍增+图论 解题报告: 传送门! 话说这题是真滴很妙啊,,,大概港下QwQ 首先看懂这道题,它是说,只要是1<<k的都能1s跑过,而且每条边的长度都是1,就是说一秒可以跑过1< ...

  7. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  8. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  9. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

随机推荐

  1. 【转】单KEY业务,数据库水平切分架构实践

    本文将以“用户中心”为例,介绍“单KEY”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 一.用户 ...

  2. Scala学习(六)---Scala对象

    Scala中的对象 摘要: 在本篇中,你将会学到何时使用Scala的object语法结构.在你需要某个类的单个实例时,或者想为其他值或函数找一个可以挂靠的地方时,你就会用到它.本篇的要点包括: 1. ...

  3. IntelliJ IDEA下自动生成Hibernate映射文件以及实体类

    来自:https://blog.csdn.net/chenyunqiang/article/details/81026823 1.构建项目并添加项目结构配置以及配置初始参数 1.1.如图将基本的架子搭 ...

  4. [JDBC]你真的会正确关闭connection吗?

    Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DriverManag ...

  5. WordPress更新时提示无法连接到FTP服务器的解决方案

    这几天在搭建主站的时候,更新wordpress时无法连接到FTP原因服务器 解决方法如下: 在WordPress目录下找到wp-config.php文件并编辑,在最后一行加上: define('FS_ ...

  6. SpringMVC环境搭建——HelloWorld

    1.新建Maven Web 工程: 2.添加相关的依赖包(Spring MVC.tomcat插件等),具体的pom.xml文件如下 <project xmlns="http://mav ...

  7. 传参在mybatis的sql映射文件中正确获取

    1.单个参数: 非自定义对象 传参:getStuById(Integer id): 取值:#{id} 单个基本类型参数,随便取值都行:#{ok} 对象: 传参:saveStudent(Student ...

  8. Maven修改默认JDK

    Maven修改默认JDK 问题: 1.创建maven项目的时候,jdk版本是1.5版本,而自己安装的是1.7或者1.8版本. 2.每次右键项目名-maven->update project 时候 ...

  9. Linux MYSQL:dead but pid file exists

    MYSQL dead but pid file exists问题 - CSDN博客https://blog.csdn.net/shilian_h/article/details/38020567 Er ...

  10. activiti-ldap-integration

    https://stackoverflow.com/questions/19488764/activiti-ldap-integration https://community.alfresco.co ...