bzoj4773: 负环
题解:
网上还有一种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 ;
}
bzoj4773: 负环的更多相关文章
- bzoj4773: 负环(倍增floyd)
浴谷夏令营例题...讲师讲的很清楚,没看题解代码就自己敲出来了 f[l][i][j]表示i到j走2^l条边的最短距离,显然有f[l][i][j]=min(f[l][i][j],f[l-1][i][k] ...
- bzoj4773 负环 倍增+矩阵
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4773 题解 最小的负环的长度,等价于最小的 \(len\) 使得存在一条从点 \(i\) 到自 ...
- 2018.11.09 bzoj4773: 负环(倍增+floyd)
传送门 跟上一道题差不多. 考虑如果环上点的个数跟最短路长度有单调性那么可以直接上倍增+floyd. 然而并没有什么单调性. 于是我们最开始给每个点初始化一个长度为0的自环,于是就有单调性了. 代码: ...
- BZOJ4773 负环(floyd+倍增)
倍增floyd求出经过<=2k条边时两点间最短路,一个点到自身的最短路就是包含该点的最小环.然后倍增找答案即可.注意初始时到自身的最短路设为0,这样求出的最短路就是经过<=2k条边的而不是 ...
- BZOJ4773: 负环(倍增Floyd)
题意 题目链接 Sol 倍增Floyd,妙妙喵 一个很显然的思路(然而我想不到是用\(f[k][i][j]\)表示从\(i\)号点出发,走\(k\)步到\(j\)的最小值 但是这样复杂度是\(O(n^ ...
- 【BZOJ4773】负环 倍增Floyd
[BZOJ4773]负环 Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边 ...
- 【BZOJ4773】负环 [SPFA][二分]
负环 Time Limit: 100 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 在忘记考虑负环之后,黎瑟的算法又出错 ...
- UVA11090 Going in Cycle!! [spfa负环]
https://vjudge.net/problem/UVA-11090 平均权值最小的回路 为后面的做个铺垫 二分最小值,每条边权减去他,有负环说明有的回路平均权值小于他 spfa求负环的时候可以先 ...
- 【洛谷P3385】模板-负环
这道题普通的bfs spfa或者ballen ford会T 所以我们使用dfs spfa 原因在于,bfs sfpa中每个节点的入队次数不定,退出操作不及时,而dfs则不会 既然,我们需要找负环,那么 ...
随机推荐
- 设计模式C++学习笔记之八(Adapter适配器模式)
适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理.是将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工 ...
- mongodb 创建更新语法
创建文档 向MongoDB插入数据,使用insert, 如:db.refactor.insert({"refactor's blog":"http://www.cnblo ...
- DHCP Server (推荐使用Windows)
一些小的服务 windows做的比linux好 DHCP服务概述: 名称:DHCP (Dynamic Host Configuration Protocol --动态主机配置协议) 功能:是一个局域网 ...
- 使用Navicat为MySQL建立定时任务
1.编写好每个小时需要指定的sql语句,我一般都是编写的一个update SQL,也可以编写好一个函数存储过程 2.点击事件,可能回看到一些事件列表,然后点击上方的“新建事件”,会打开一个事件定义框( ...
- MySql 使用规范推荐(转)
在java应用开发中深知数据库的重要性,绝大多数情况下数据库的性能决定了程序的性能,前期如果埋下的坑越多到后期会成为整个程序的瓶颈,所以希望java开发者一定要重视!!!! 一.基础规范 1.使用In ...
- 【原创】大数据基础之Presto(1)简介、安装、使用
presto 0.217 官方:http://prestodb.github.io/ 一 简介 Presto is an open source distributed SQL query engin ...
- Go学习笔记(只有链接)
Go学习笔记 link: https://blog.csdn.net/u011304970/article/details/69908641 仅作为记录使用.
- Truffle框架环境搭建
注意:本教程需要Truffle4.0或者是更高的版本 以太坊的智能合约只是代码,和我们的纸质代码不同,此合同需要非常精确的方式理解 如果合同编码不正确,我们的交易可能会失败,会导致gas的损失,更不用 ...
- JsRender 前端渲染模板基础学习
JsRender前端渲染模板 使用模板,可以预先自定义一些固定格式的HTML标签,在需要显示数据时,再传入真实数据组装并展示在Web页中:避免了在JS中通过“+”等手动分割.连接字符串的复杂过程:针对 ...
- swift 学习- 25 -- 协议 02
// 通过扩展添加协议一致性 // 即便无法修改源代码, 依然可以通过扩展 令已有类型遵循并符合协议, 扩展可以为已有类型添加属性, 方法, 下标 以及构造器, 因此可以符合协议中的相应要求 // 注 ...