洛谷1613跑路解题记录

题目描述

小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

思路&题解:

  最开始看到这道题的时候感觉这是道水题,直接spfa跑最短路,然后把最短路用倍增分解下就可以了。然后……大红大紫(ORZ)。后来不服气,看了题解,发现可以从自己跑到自己,因为有跑路器的缘故,所以有的时候最短的时间并不是对应最短路。因为跑路器可以在一秒的时间中跑(2^k)m所以我们可以开一个数组b[k][i][j]来记录i到j路径中有没有一条路径的长度时(2^k)m如果有就将dis[i][j]的值赋为1,然后跑最短路即可。下面贴代码吧。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long LL;
 7 const int N=55;
 8 int dis[N][N];
 9 bool b[64][N][N];
10 int n,m;
11 void Init()
12 {
13     memset(dis,0x7f,sizeof(dis));
14     int i,x,y;
15     scanf("%d%d",&n,&m);
16     for(i=1;i<=m;i++)
17     {
18         scanf("%d%d",&x,&y);
19         dis[x][y]=1;
20         b[0][x][y]=1;
21     }
22 }
23 void floyd()
24 {
25     int i,j,k;
26     for(k=1;k<=n;k++)
27     {
28         for(i=1;i<=n;i++)
29         {
30             for(j=1;j<=n;j++)
31             {
32                 if(dis[i][k]<=0x7fffff&&dis[k][j]<=0x7fffff)
33                 {
34                     dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
35                 }
36             }
37         }
38     }
39 }
40 void work()
41 {
42     int l,k,i,j;
43     for(l=1;l<=62;l++)
44     {
45         for(k=1;k<=n;k++)
46         {
47             for(i=1;i<=n;i++)
48             {
49                 for(j=1;j<=n;j++)
50                 {
51                     if(b[l-1][i][k]&&b[l-1][k][j])
52                     {
53                         dis[i][j]=1;
54                         b[l][i][j]=1;
55                     }
56                 }
57             }
58         }
59     }
60     floyd();
61     printf("%d",dis[1][n]);
62 }
63 int main()
64 {
65     Init();
66     work();
67     return 0;
68 }
时间: 2024-08-04 17:26:17

洛谷1613跑路解题记录的相关文章

洛谷1613 跑路

本题地址:http://www.luogu.org/problem/show?pid=1613 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟可以跑2^k千米(k是任意数).当然,这个机器是用longint存的,所以总跑路长度不能超过maxlongint千米.小A的家到公司的路可以看做一个有向图,小A家为点1,公司为点n,每条边长度均为一千米.

洛谷P1613 跑路

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

洛谷P1589 泥泞路

洛谷P1589 泥泞路 题目描述 暴雨过后,FJ的农场到镇上的公路上有一些泥泞路,他有若干块长度为L的木板可以铺在这些泥泞路上,问他至少需要多少块木板,才能把所有的泥泞路覆盖住. 输入输出格式 输入格式: 第一行为正整数n(≤10000)和L(≤10000),分别表示有多少段泥泞路和木板的长度:接下来n行,每一行两个整数s和e(s≤e≤10^9),表示每一段泥泞路的起点和终点. 输出格式: 仅一个正整数,表示木板数. 输入输出样例 输入样例#1: 复制 3 3 1 6 13 17 8 12 输出

跑路(洛谷 1613)

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

洛谷1056 排座椅 解题报告

洛谷1056 排座椅 本题地址:http://www.luogu.org/problem/show?pid=1056 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道.于是,聪明的小雪想到了一个办法,或许可以减少上课

洛谷1086 花生采摘 解题报告

洛谷1086 花生采摘 本题地址:http://www.luogu.org/problem/show?pid=1086 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”.鲁宾逊先生和多多都很开心,因为花生正是他们的最爱.在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1).有经验的多多一眼就能看出,每棵花生植株下的花生有多少.为了训练多多的算术,鲁宾逊先生说:“你先找

洛谷1003 铺地毯 解题报告

洛谷1003 铺地毯 本题地址:http://www.luogu.org/problem/show?pid=1003 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上. 地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号.注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖. 输

洛谷1067 多项式输出 解题报告

洛谷1067 多项式输出 本题地址:http://www.luogu.org/problem/show?pid=1067 题目描述 一元 n 次多项式可用如下的表达式表示:其中,aixi称为 i 次项,ai 称为 i 次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 1. 多项式中自变量为 x,从左到右按照次数递减顺序给出多项式. 2. 多项式中只包含系数不为 0 的项. 3. 如果多项式 n 次项系数为正,则多项式开头不出现“+”号,如果多项式 n 次项系

洛谷——P1589 泥泞路

P1589 泥泞路 题目描述 暴雨过后,FJ的农场到镇上的公路上有一些泥泞路,他有若干块长度为L的木板可以铺在这些泥泞路上,问他至少需要多少块木板,才能把所有的泥泞路覆盖住. 输入输出格式 输入格式: 第一行为正整数n(≤10000)和L(≤10000),分别表示有多少段泥泞路和木板的长度:接下来n行,每一行两个整数s和e(s≤e≤10^9),表示每一段泥泞路的起点和终点. 输出格式: 仅一个正整数,表示木板数. 输入输出样例 输入样例#1: 复制 3 3 1 6 13 17 8 12 输出样例