卡了一上午常数,本地13s,可是bzoj 就是过不去~

#include <bits/stdc++.h>
#define N 102
#define M 55
#define ll long long
#define inf -1
#define setIO(s) freopen(s".in","r",stdin) , freopen("de.out","w",stdout)
using namespace std;
char *p1,*p2,buf[100000];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rdint() {int x=0; char c=nc(); while(c<48) c=nc(); while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x;}
ll rdll() {ll x=0; char c=nc(); while(c<48) c=nc(); while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x;}
int n;
ll m;
ll f[N][N],dis[N][N][70],tmp[N],g[N];
void solve()
{
int i,j,k;
n=rdint();
m=rdll();
for(i=0;i<=n;++i)
for(j=0;j<=n;++j)
for(k=0;k<70;++k) dis[i][j][k]=-1;
for(i=1;i<=n;++i)
{
for(k=0;k<=M;++k)
dis[i][i][k]=0;
}
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
ll p=rdll();
if(p)
{
dis[i][j][0]=max(dis[i][j][0], p);
}
}
}
for(int l=1;;++l)
{
for(k=1;k<=n;++k)
{
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
if(dis[i][k][l-1]!=-1 && dis[k][j][l-1]!=-1)
{
dis[i][j][l]=max(dis[i][j][l], dis[i][k][l-1]+dis[k][j][l-1]);
}
}
}
}
ll re=0;
for(i=1;i<=n;++i) re=max(re, dis[1][i][l]);
if(re>=m) {
i=l;
break;
}
}
int flag=0;
ll ans=0;
for(int l=i;l>=0;--l)
{
if(!flag)
{
flag=1;
for(i=1;i<=n;++i)
{
if(dis[1][i][l]>=m)
{
flag=0;
}
}
if(flag==0) continue;
else
{
// for(i=1;i<=n;++i)
for(j=1;j<=n;++j) tmp[j]=dis[1][j][l];
ans+=(1ll<<l);
}
}
else
{
for(i=0;i<=n;++i) g[i]=-1;
for(k=1;k<=n;++k)
{
for(j=1;j<=n;++j)
{
if(dis[k][j][l]!=inf && tmp[k]!=inf)
{
g[j]=max(g[j], tmp[k]+dis[k][j][l]);
}
}
}
int cc=0;
for(i=1;i<=n;++i) if(g[i]>=m) cc=1;
if(!cc)
{
for(j=1;j<=n;++j) tmp[j]=g[j];
ans+=(1ll<<l);
}
}
}
printf("%lld\n",ans+1);
}
int main()
{
// setIO("input");
int T;
scanf("%d",&T);
while(T--)
{
solve();
}
return 0;
}

  

BZOJ 2165: 大楼 倍增Floyd的更多相关文章

  1. bzoj 2165: 大楼【Floyd+矩阵乘法+倍增+贪心】

    1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) ...

  2. [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

    题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...

  3. BZOJ 2165: 大楼

    Time Limit: 40 Sec Memory Limit: 259 MB Submit: 957 Solved: 353 [Submit][Status][Discuss] Descriptio ...

  4. bzoj2165: 大楼(倍增floyd)

    题目大意:一个有向图,n(<=100)个点求一条长度>=m(<=10^18)的路径最少经过几条边. 一开始以为是矩乘,蓝鹅当时还没开始写,所以好像给CYC安利错了嘿嘿嘿QWQ 第一眼 ...

  5. BZOJ.4180.字符串计数(后缀自动机 二分 矩阵快速幂/倍增Floyd)

    题目链接 先考虑 假设S确定,使构造S操作次数最小的方案应是:对T建SAM,S在SAM上匹配,如果有S的转移就转移,否则操作数++,回到根节点继续匹配S.即每次操作一定是一次极大匹配. 简单证明:假设 ...

  6. 【CF461E】Appleman and a Game 倍增floyd

    [CF461E]Appleman and a Game 题意:你有一个字符串t(由A,B,C,D组成),你还需要构造一个长度为n的字符串s.你的对手需要用t的子串来拼出s,具体来说就是每次找一个t的子 ...

  7. 2018.11.09 bzoj4773: 负环(倍增+floyd)

    传送门 跟上一道题差不多. 考虑如果环上点的个数跟最短路长度有单调性那么可以直接上倍增+floyd. 然而并没有什么单调性. 于是我们最开始给每个点初始化一个长度为0的自环,于是就有单调性了. 代码: ...

  8. 2018.11.09 bzoj1706: relays 奶牛接力跑(倍增+floyd)

    传送门 倍增+floyd板子题. 先列出状态fi,j,kf_{i,j,k}fi,j,k​表示经过iii条边从jjj到kkk的最短路. 然后发现可以用fi−1,j,kf_{i-1,j,k}fi−1,j, ...

  9. BZOJ4773: 负环(倍增Floyd)

    题意 题目链接 Sol 倍增Floyd,妙妙喵 一个很显然的思路(然而我想不到是用\(f[k][i][j]\)表示从\(i\)号点出发,走\(k\)步到\(j\)的最小值 但是这样复杂度是\(O(n^ ...

随机推荐

  1. Escape(多记一个方向状态的BFS)迷宫逃脱

    题意:https://www.nitacm.com/problem_show.php?pid=2266 vis记[x][y][dir]三个状态就行. 引用:https://blog.csdn.net/ ...

  2. USB协议基础知识

    ref : https://blog.csdn.net/u010142953/article/details/82627591 USB 基本知识  USB的重要关键概念:  1. 端点:位于USB设备 ...

  3. Docker pull 出现的 error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/

    vim /etc/sysconfig/docker OPTIONS='--selinux-enabled --log-driver=journald --signature-verification= ...

  4. 常用bat文件

    rmLog.bat @echo offpause >nul | echo 按任意键继续3pause >nul | echo 按任意键继续2pause >nul | echo 按任意键 ...

  5. 命令行发送SMTP协议邮件(163邮箱)

    这里我们用163邮箱为例子,借助命令行发送smtp邮件 1.连接服务器 在终端上输入:telnet smtp.163.com 25 回车,然后就连接了服务器的25端口,成功会输出 220 163.co ...

  6. Django2.0 应用 Xadmin 报错解决(转载)

    原文地址:https://blog.csdn.net/GoAheadNeverTurnBack/article/details/8143362 1.TypeError at /xadmin/    l ...

  7. [JZOJ100026]图--倍增

    [JZOJ100026]图--倍增 题目链接 太懒了,自行搜索 分析 裸倍增,不多说 \(fa[i][j]\)表示\(i\)跳\(2^j\)步走到的点 \(f[i][j]\)表示\(i\)跳\(2^j ...

  8. 基于【 springBoot +springCloud+vue 项目】二 || 后端框架详解

     前言 在上一篇中,我们搭建了一个-API服务提供接口模块,目的为了提供了消费方进行调用.为什么不直接在service层直接提供调用接口,而是重新创建一个接口层模块?首先我们需要对Feign有所了解. ...

  9. Django安装和介绍

    在CMD和pycharm的安装方法. 先说CMD的安装方法 1,使用pip3 install django 2,进入c:python\Scripts 3,django-admin.exe startp ...

  10. shutil:高层文件操作

    介绍 shutil模块包括一些高层文件操作,如赋值和归档 复制文件 import shutil ''' copyfile将源文件的内容复制到目标文件,如果没有权限写目标文件,则会产生一个IOError ...