博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 11090 - Going in Cycle!!(Bellman-Ford)
阅读量:7287 次
发布时间:2019-06-30

本文共 2021 字,大约阅读时间需要 6 分钟。

UVA 11090 - Going in Cycle!!

题意:给定一个有向图,球平均权值最小的回路

思路:二分+判负环。每次二分一个值mid。推断是否存在小于mid的环,那么就是(w1 + w2 + w3...) / n < mid == w1 - mid + w2 - mid + w3 - mid .... < 0,所以每次二分的时候。把边权值减掉mid。之后bellmanford判负环就可以

代码:

#include 
#include
#include
#include
#include
using namespace std;typedef double Type;const int MAXNODE = 55;struct Edge { int u, v; Type dist; Edge() {} Edge(int u, int v, Type dist) { this->u = u; this->v = v; this->dist = dist; }};struct BellmanFrod { int n, m; vector
edges; vector
g[MAXNODE]; bool inq[MAXNODE]; Type d[MAXNODE]; int p[MAXNODE]; int cnt[MAXNODE]; void init(int n) { this->n = n; for (int i = 0; i < n; i++) g[i].clear(); edges.clear(); } void add_Edge(int u, int v, Type dist) { edges.push_back(Edge(u, v, dist)); m = edges.size(); g[u].push_back(m - 1); } bool negativeCycle() { queue
Q; memset(inq, 0, sizeof(inq)); memset(cnt, 0, sizeof(cnt)); for (int i = 0; i < n; i++) { d[i] = 0; inq[i] = true; Q.push(i); } while (!Q.empty()) { int u = Q.front(); Q.pop(); inq[u] = false; for (int i = 0; i < g[u].size(); i++) { Edge& e = edges[g[u][i]]; if (d[e.v] > d[u] + e.dist) { d[e.v] = d[u] + e.dist; p[e.v] = g[u][i]; if (!inq[e.v]) { Q.push(e.v); inq[e.v] = true; if (++cnt[e.v] > n) return true; } } } } return false; }} gao;int T, n, m;bool judge(double mid) { for (int i = 0; i < gao.m; i++) gao.edges[i].dist -= mid; bool tmp = gao.negativeCycle(); for (int i = 0; i < gao.m; i++) gao.edges[i].dist += mid; return tmp;}int main() { scanf("%d", &T); int cas = 0; while (T--) { scanf("%d%d", &n, &m); gao.init(n); int u, v; double dist; double Max = 0; while (m--) { scanf("%d%d%lf", &u, &v, &dist); u--; v--; Max = max(Max, dist); gao.add_Edge(u, v, dist); } printf("Case #%d: ", ++cas); if (!judge(Max + 1)) printf("No cycle found.\n"); else { double l = 0, r = Max; for (int i = 0; i < 100; i++) { double mid = (l + r) / 2; if (!judge(mid)) l = mid; else r = mid; } printf("%.2lf\n", l); } } return 0;}

转载地址:http://xppjm.baihongyu.com/

你可能感兴趣的文章
中兴智能视觉大数据报道:人工智能相当火爆,或将下一个风口
查看>>
OCP 12c最新考试原题及答案(071-3)
查看>>
xdebug+phpstorm(windows)
查看>>
Spring Boot整合Hibernate操作
查看>>
阿里云移动端播放器高级功能---直播时移
查看>>
主动式部署陷阱
查看>>
webx2.0-RundataService学习总结
查看>>
SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
查看>>
云计算培训论云计算下的网络安全及措施
查看>>
users表空间在线损坏(不通过RMAN恢复)
查看>>
我在51cto第一篇博客
查看>>
TCP三次握手 和四次挥手
查看>>
基于本地配置文件的vsftpd
查看>>
MFC 对话框添加背景图片
查看>>
javascript中的void运算符语法及使用介绍
查看>>
《从零开始学Swift》学习笔记(Day 18)——有几个分支语句?
查看>>
类-Class
查看>>
T-SQL 优化
查看>>
System Center2012综述
查看>>
zabbix proxy搭建及应用proxy监控腾讯CVM服务器
查看>>