zoukankan      html  css  js  c++  java
  • P1613 跑路

    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。

    先倍增,在floyd跑最短路。倍增跑出到2^k的点,因为到他们是1,在跑一边Floyd

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 const int MAXN = 60;
     7 int dis[MAXN][MAXN],f[MAXN][MAXN][35];
     8 
     9 int main()
    10 {
    11     int n,m;
    12     scanf("%d%d",&n,&m);
    13     memset(dis,0x3f,sizeof(dis));
    14     for (int u,v,i=1; i<=m; ++i)
    15     {
    16         scanf("%d%d",&u,&v);
    17         dis[u][v] = 1;
    18         f[u][v][0] = 1;
    19     }
    20     for (int w=0; w<=32; ++w)    //从0开始 
    21         for (int i=1; i<=n; ++i)
    22             for (int k=1; k<=n; ++k)
    23                 if (f[i][k][w])
    24                     for (int j=1; j<=n; ++j)
    25                         if (f[k][j][w])
    26                         {
    27                             f[i][j][w+1] = 1;
    28                             dis[i][j] = 1;
    29                         }
    30     for (int k=1; k<=n; ++k)
    31         for (int i=1; i<=n; ++i)
    32             for (int j=1; j<=n; ++j)
    33                 dis[i][j] = min(dis[i][k]+dis[k][j],dis[i][j]);
    34     printf("%d",dis[1][n]);
    35     return 0;
    36 }
  • 相关阅读:
    long和Long的区别
    C语言的变量的内存分配
    Java蓝桥杯 算法提高 九宫格
    Java实现 蓝桥杯算法提高金明的预算方案
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7100696.html
Copyright © 2011-2022 走看看