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

    luogu 传送门

    倍增吗?
    我们定义 f[k][i][j] 表示从点 i 到点 j 能否通过跳2^k(1秒)直接跳到,跳到为1,否则为0;
    那么就有如果 f[k-1][i][j]&&f[k-1][i][j] 则f[k][i][j]=1; (想一想就是啊)

    如果可以一步跳到的,dis[i][j]设为1,其余为大值,跑一边O(n^3)的floyed也可以过啦。

    注意dis不可设为127,会爆的!

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<string>
    #include<cstring> 
    #define LL long long
    using namespace std;
    int f[65][51][51],dis[51][51];
    int n,m;
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i][j]=65;
        for(int i=1;i<=m;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            f[0][u][v]=1;dis[u][v]=1;
        }
        for(int i=1;i<65;i++)
         for(int k=1;k<=n;k++)
          for(int u=1;u<=n;u++)
           for(int v=1;v<=n;v++){
            if(f[i-1][u][k]&&f[i-1][k][v])
             f[i][u][v]=1,dis[u][v]=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]);
        printf("%d",dis[1][n]);
        return 0;
    }
  • 相关阅读:
    区别Lua模式匹配中 %a+ 与 .-
    将硬件规定的通信协议用Lua实现(涉及到很多Lua通信的数据转换)
    Lua库-string库
    Unity3d
    Unity3d
    Unity3d
    Unity3d
    Unity3d
    Unity3d
    Unity3d
  • 原文地址:https://www.cnblogs.com/dfsac/p/7587823.html
Copyright © 2011-2022 走看看