BZOJ 4773: 负环 倍增Floyd
现在看来这道题就非常好理解了.
可以将问题转化为求两点间经过 $k$ 个点的路径最小值,然后枚举剩余的那一个点即可.
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 303
#define inf 1000000000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
namespace IO
{
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() { int x = 0, f = 1;char c = nc();while (c < 48) {if (c == '-')f = -1;c = nc();}while (c > 47) {x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();}return x * f;}
};
int n,m,dis[N][N][10],tmp[2][N][N];
inline void getmin(int &a,int b) { if(b<a)a=b; }
inline int check()
{
int i;
for(i=1;i<=n;++i) if(tmp[1][i][i]<0) return 1;
return 0;
}
int main()
{
int i,j,k,l,ans=inf;
// setIO("input");
n=IO::rd(),m=IO::rd();
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
for(k=0;k<10;++k) dis[i][j][k]=inf;
}
for(i=1;i<=n;++i) for(k=0;k<10;++k) dis[i][i][k]=0;
for(i=1;i<=m;++i)
{
int a=IO::rd(),b=IO::rd(),c=IO::rd();
getmin(dis[a][b][0], c);
}
for(l=1;l<10;++l)
{
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
{
if(dis[i][k][l-1]==inf) continue;
for(j=1;j<=n;++j)
{
if(dis[i][k][l-1]<inf && dis[k][j][l-1]<inf)
getmin(dis[i][j][l],dis[i][k][l-1]+dis[k][j][l-1]);
}
}
}
for(i=1;i<=n;++i) for(j=1;j<=n;++j) tmp[0][i][j]=inf;
for(i=1;i<=n;++i) tmp[0][i][i]=0;
int now=0;
for(l=9;l>=0;--l)
{
for(i=1;i<=n;++i) for(j=1;j<=n;++j) tmp[1][i][j]=tmp[0][i][j];
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
{
if(tmp[0][i][k]==inf) continue;
for(j=1;j<=n;++j)
getmin(tmp[1][i][j], tmp[0][i][k]+dis[k][j][l]);
}
if(check()) getmin(ans,now|(1<<l));
else
{
now|=(1<<l);
for(i=1;i<=n;++i) for(j=1;j<=n;++j) tmp[0][i][j]=tmp[1][i][j];
}
}
printf("%d\n",ans==inf?0:ans);
return 0;
}
BZOJ 4773: 负环 倍增Floyd的更多相关文章
- bzoj 4773: 负环——倍增
Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边和自环. Input 第1 ...
- 【BZOJ4773】负环 倍增Floyd
[BZOJ4773]负环 Description 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得 环上的边权和为负数.保证图中不包含重边 ...
- BZOJ4773: 负环(倍增Floyd)
题意 题目链接 Sol 倍增Floyd,妙妙喵 一个很显然的思路(然而我想不到是用\(f[k][i][j]\)表示从\(i\)号点出发,走\(k\)步到\(j\)的最小值 但是这样复杂度是\(O(n^ ...
- bzoj 4773: 负环 floyd
题目: 对于边带权的有向图,找出一个点数最小的环,使得环上的边权和为负. 2 <= n <= 300. 题解: 我们可以考虑从小到大枚举答案. 然后每次枚举更大的答案的时候就从当前的较小的 ...
- BZOJ4773 负环(floyd+倍增)
倍增floyd求出经过<=2k条边时两点间最短路,一个点到自身的最短路就是包含该点的最小环.然后倍增找答案即可.注意初始时到自身的最短路设为0,这样求出的最短路就是经过<=2k条边的而不是 ...
- bzoj4773 负环 倍增+矩阵
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4773 题解 最小的负环的长度,等价于最小的 \(len\) 使得存在一条从点 \(i\) 到自 ...
- 4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
容易想到 这个环一定是简单环. 考虑如果是复杂环 那么显然对于其中的第一个简单环来说 要么其权值为负 如果为正没必要走一圈 走一部分即可. 对于前者 显然可以找到更小的 对于第二部分是递归定义的. 综 ...
- 2018.11.09 bzoj4773: 负环(倍增+floyd)
传送门 跟上一道题差不多. 考虑如果环上点的个数跟最短路长度有单调性那么可以直接上倍增+floyd. 然而并没有什么单调性. 于是我们最开始给每个点初始化一个长度为0的自环,于是就有单调性了. 代码: ...
- 负环 BZOJ 4773
负环 [问题描述] 在忘记考虑负环之后,黎瑟的算法又出错了.对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得环上的边权和为负数.保证图中不包含重边和自环. [输入格式] 第1两个 ...
随机推荐
- 【VS开发】利用VS2015的工程文件来复制另外一个工程的配置的使用说明
[VS开发]利用VS2015的工程文件来复制另外一个工程的配置的使用说明 标签:[VS开发] 说明:总是有时候会遇到这样的问题,在一个工程中完成了对某些PKG包的包含,包括头文件和库等都能发现,但是我 ...
- 【VS开发】win7下让程序默认以管理员身份运行
在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题:最后点右键以管理员身份运行才可以正常运行.于是想办法让程序在双击启动时默认以管理员身份运行.具体方法: 1 ...
- vue ----》实现打印功能
1.安装打印相关依赖 cnpm install vue-print-nb --save 2.安装后,在main.js文件中引入 import Print from 'vue-print-nb' Vue ...
- N76E003双串口无法进UART1中断问题解决办法
最近在做有关N76E003的项目,使用到双串口.串口的配置没有特殊要求,最基本的配置 void Uart0_Init(void) { //—————————串口0引脚初始化———————— set_P ...
- Spring依赖模块
1.spring maven依赖 https://www.cnblogs.com/nwu-edu/p/9542074.html
- windows如何使用bat快速安装计划任务?
关键词:windows定时任务,schtasks,at ,bat schtasks 部分转自: https://www.cnblogs.com/yumianhu/p/3710743.html at的详 ...
- sql中生成随机字符串的function
create or replace function random_string(integer) returns text as $body$ ))::) , $)), ''); $body$ la ...
- redis 小结二
1.在redis客户端获取redis 配置文件的某个配置信息(需要先打开redis客户端) config get 配置项 , 如果要列出所有的配置项( CONFIG GET *) 2.在redis ...
- python 链接mysql
下载对应版本 安装 https://dev.mysql.com/downloads/connector/python/ 创建链接 # python 链接mysqlimport mysql.conn ...
- Node.js FS模块方法速查
1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参数是回调函数.回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能 ...