bzoj4773: 负环
来源:互联网 发布:下载淘宝网商城 编辑:程序博客网 时间:2024/05/19 20:58
Description
在忘记考虑负环之后,黎瑟的算法又出错了。对于边带权的有向图 G = (V, E),请找出一个点数最小的环,使得
环上的边权和为负数。保证图中不包含重边和自环。
Input
第1两个整数n, m,表示图的点数和边数。
接下来的m行,每<=三个整数ui, vi, wi,表<=有一条从ui到vi,权值为wi的有向边。
2 <= n <= 300
0 <= m <= n(n <= 1)
1 <= ui, vi <= n
|wi| <= 10^4
Output
仅一行一个整数,表示点数最小的环上的点数,若图中不存在负环输出0。
Sample Input
3 6
1 2 -2
2 1 1
2 3 -10
3 2 10
3 1 -10
1 3 10
Sample Output
2
题解
又长新姿势了,lalal
这题想了很久,只想到一个dfs,然而虽然看起来挺好,但实际上跑不过,我试过了TAT
然后羊老师教我秒题。。
新姿势:跑多次floyd找负环Get
具体看代码吧,应该看得懂
顺便学了一下倍增floyd,但是这题我没打。。其实可以二分答案+倍增floyd,就可以
#include<cstdio>#include<cstring>const int N=305;int n,m;int f[N][N];int g[N][N];int a[N][N];int mymin (int x,int y){return x<y?x:y;}int main(){ scanf("%d%d",&n,&m); for (int u=1;u<=n;u++) for (int i=1;i<=n;i++) a[u][i]=f[u][i]=g[u][i]=(1<<28); for (int u=1;u<=m;u++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); f[x][y]=mymin(f[x][y],z); g[x][y]=mymin(g[x][y],z); } bool tf=false; for (int u=1;u<=n;u++) { for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) for (int k=1;k<=n;k++) a[j][k]=mymin(f[j][i]+g[i][k],a[j][k]); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) f[i][j]=a[i][j]; for (int i=1;i<=n;i++) if (f[i][i]<0) { tf=true; break; } if (tf) { printf("%d\n",u+1); break; } } if (tf==false) printf("0\n"); return 0;}
阅读全文
0 0
- BZOJ4773 负环
- [bzoj4773]负环
- bzoj4773负环
- bzoj4773 负环
- bzoj4773: 负环
- spfa判断负环
- spfa && 判断负环
- 判断负环poj1860
- 4773: 负环
- spfa负环 P2868
- 洛谷P3385 负环
- Bellman_Ford的负环
- UVA 558 判断负环
- Wormholes (判断负环)
- SPFA查找负环 POJ3259
- UVA - 558 Wormholes 负环
- poj3259 负环的判断
- UVALive - 4618 Wormholes(负环)
- Java服务器文件批量拷贝io流
- 9月英语总结
- Redis入门
- XML和HTML的区别
- postgresql 数据库 命令行常用操作
- bzoj4773: 负环
- C# 引用Org.BouncyCastle.Crypto 签名&解密
- Vue知识
- Day3(上) 一篇文章带你吃透ViewPager的三大用法及刷新问题
- 基于opencv和Tensorflow的实时手势识别(1)
- 进程不在,为何能收到PUSH?
- 为什么PHICH配置信息和下行带宽dl-bandwith必须在PBCH MIB上广播
- 设计模式7-装饰模式
- Linux下rar tar bz gz等命令压缩和解压详解 rar------------------------------------------------------------------