负环

【问题描述】

在忘记考虑负环之后,黎瑟的算法又出错了。对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得环上的边权和为负数。保证图中不包含重边和自环。

【输入格式】

第1两个整数n, m,表示图的点数和边数。
接下来的m行,每<=三个整数ui, vi, wi,表<=有一条从ui到vi,权值为wi的有向边。

【输出格式】

仅一行一个整数,表示点数最小的环上的点数,若图中不存在负环输出0。

【样例输入】

3 6
1 2 -2
2 1 1
2 3 -10
3 2 10
3 1 -10
1 3 10

【样例输出】

2

【数据范围】

2 <= n <= 300, 0 <= m <= n(n <= 1), 1 <= ui, vi <= n, |wi| <= 10^4

题解:

考虑二分最小点数,用 Floyed (用倍增来限制步数)检验答案的范围区间

那么将二分过程化为倍增的过程,可行时不断缩小答案,否则继承当前答案

 #include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = ;
const int logn = ;
inline int Get()
{
int x;
char c;
bool o = false;
while((c = getchar()) < '' || c > '')
if(c == '-') o = true;
x = c - '';
while((c = getchar()) >= '' && c <= '')
x = x * + c - '';
return (o) ? -x : x;
}
int n, m;
int f[maxn][maxn][logn + ], g[maxn][maxn], s[maxn][maxn];
inline void Clear()
{
memset(f, / , sizeof(f));
for(int k = ; k <= logn; ++k)
for(int i = ; i <= n; ++i)
f[i][i][k] = ;
memset(s, / , sizeof(s));
for(int i = ; i <= n; ++i) s[i][i] = ;
}
int main()
{
n = Get(), m = Get();
Clear();
for(int i = ; i <= m; ++i)
{
int x = Get(), y = Get(), z = Get();
f[x][y][] = z;
}
for(int l = ; l <= logn; ++l)
for(int i = ; i <= n; ++i)
for(int j = ; j <= n; ++j)
for(int k = ; k <= n; ++k)
f[i][j][l] = min(f[i][j][l], f[i][k][l - ] + f[k][j][l - ]);
int ans = ;
for(int l = logn; l >= ; --l)
{
memcpy(g, s, sizeof(g));
for(int i = ; i <= n; ++i)
for(int j = ; j <= n; ++j)
for(int k = ; k <= n; ++k)
s[i][j] = min(s[i][j], g[i][k] + f[k][j][l]);
bool flag = false;
for(int i = ; i <= n; ++i)
if(s[i][i] < )
{
flag = true;
break;
}
if(flag) memcpy(s, g, sizeof(s));
else ans += ( << l);
}
if(ans > n) printf("0\n");
else printf("%d\n", ans);
}

最新文章

  1. webpack使用笔记
  2. toString()方法
  3. Kubernetes如何使用kube-dns实现服务发现
  4. python中的时间处理函数
  5. C#_生成HTML
  6. iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库
  7. SpringMvc+Mybatis 框架搭建
  8. cpu进程调度---RT Throttling【转】
  9. sed实例一则
  10. Android App接入微信开放平台注意事项
  11. Android Fragment 实例
  12. [Protractor] Test Simple Binding With Protractor
  13. SDK文件夹下内容介绍
  14. Java程序栈信息文件中的秘密(五)
  15. KMP 知识点总结
  16. iOS透明引导页
  17. python网络-Socket之udp编程(24)
  18. .NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练
  19. Python—re模块
  20. web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

热门文章

  1. 常用的 Excel 函数
  2. UEditor练习(JSP版)
  3. 来自-小坦克:Fiddler教程
  4. pseudogene|鉴定功能基因|expressed se|quence tag
  5. 许大神- xulinbo xulingbo 分享
  6. vue axios 请求本地接口端口不一致出现跨域设置代理
  7. windows 7虚拟机与主机不能互ping通,但是都能与网关ping通
  8. LeetCode(106) Construct Binary Tree from Inorder and Postorder Traversal
  9. spring mvc3 配置&lt;mvc:resources/&gt; @Controller失效
  10. tomcat 下catalina.out 日志乱码问题处理