题解:

网上还有一种spfa+深度限制的算法

https://www.cnblogs.com/BearChild/p/6624302.html

是不加队列优化的spfa,我觉得复杂度上限是bellman-ford nm的,另外从每个点跑加上二分答案所以是n^2mlogn的

但实测的确是挺快的,可能是深度限制的原因

这题可以用倍增floyd

比较慢的就是二分+倍增floyd是n^3log^2n的

可以直接用找lca的思想,做到n^3logn

不太懂floyd的理论

两个矩阵算起来的时候要用新矩阵去更新的

c[i][j]=min(c[i][j],a[i][k]+b[k][j])这样做

然后卡了一下常(指针)

不过在bz上效果好像不是很明显

自己测试还是很明显得

不过windos下数组极慢,要用5.5s

linux下只用了2s,指针的win和linux下几乎相同都是1s

代码:

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
const int INF=1e9;
const int N=;
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return (A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++);
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=c^;
while (c=gc(),<c&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
int f[][N][N],t[N][N],t1[N][N],n,m;
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
read(n); read(m);
rep(k,,)
rep(i,,n)
rep(j,,n)
if (i!=j)
f[k][i][j]=INF;
rep(i,,m)
{
int x,y,z;
read(x); read(y); read(z);
if (f[][x][y]>z) f[][x][y]=z;
}
rep(i,,)
{
rep(i1,,n)
rep(i2,,n)
{
rint tmp=f[i-][i2][i1];
rint *p1=f[i-][i1];
rep(i3,,n)
{
rint *p3=f[i][i2];
rint p4=p3[i3];
rint p2=tmp+p1[i3];
if (p4>p2) p3[i3]=p2;
}
}
}
rep(i,,n)
rep(j,,n)
t[i][j]=f[][i][j];
int ans=;
dep(i,,)
{
rep(i1,,n)
rep(i2,,n)
t1[i1][i2]=INF;
rep(i1,,n)
{
rint (*g)=f[i][i1];
rep(i2,,n)
{
rint tmp=t[i2][i1];
rint *p3=t1[i2];
rep(i3,,n)
{
rint p1=p3[i3];
rint p2=tmp+g[i3];
if (p1>p2) p3[i3]=p2;
}
}
}
bool tt=;
rep(j,,n)
if (t1[j][j]<) tt=;
if (!tt)
{
ans+=<<i;
memcpy(t,t1,sizeof(t1));
}
}
if (ans+==) cout<<<<endl;
else cout<<ans+<<endl;
return ;
}

最新文章

  1. CentOS 7 x64下Apache+MySQL(Mariadb)+PHP56的安装
  2. .NET跨平台之旅:在Linux上将ASP.NET 5运行日志写入文件
  3. android 中View的优化
  4. 【转】 STL中的set容器的一点总结
  5. 记录sublime text2的技巧
  6. Qt单元测试
  7. MFC应用程序向导生成的文件
  8. Spring cloud项目实践(一)
  9. spring security +spring boot 自定义 403 页面
  10. testng,soket write error错误
  11. C# 截取字符串某个字符分割的最后一部分
  12. Xmpp实现简单聊天系列 --- ②用户注册和登陆
  13. 对X86汇编的理解与入门
  14. SpringBoot+Mybatis+Freemark 最简单的例子
  15. Vxworks下的SATA提速
  16. C++项目中采用CLR的方式调用C#编写的dll
  17. 二.css介绍
  18. es基本修改相关的
  19. ethr 微软开源的tcp udp http 网络性能测试工具
  20. ABAP-定时-异步

热门文章

  1. 设计模式C++学习笔记之十四(Iterator迭代器模式)
  2. vc++基础班[28]---动态数组及动态链表的讲解
  3. CDHtmlDialog探索----WebBrowser扩展和网页Javascript错误处理
  4. 题解-PKUWC2018 随机游走
  5. EF使用Fluent API配置映射关系
  6. DCL单例模式
  7. mysql 5.6 windows 启动脚本
  8. datatables:如何禁用一列的排序
  9. ubuntu 安装配置 mysql
  10. 安娜Anna:世界最快的超级伸缩的KVS, 秒杀Redis