1486: [HNOI2009]最小圈

Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 2728 Solved: 1315
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

4 5

1 2 5

2 3 5

3 1 5

2 4 3

4 1 3

Sample Output

3.66666667

HINT

Source

题解

\(0/1\)分数规划裸题
学了一发\(dfsspfa\)判负环
依据是任何一个负环都可以从一个点开始走,总是走最短路减小且最短路为负的点到终点
把\(d\)全部负为\(0\),就可以保证走的每一步都是负的。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <map>
#include <cmath>
inline int max(int a, int b){return a > b ? a : b;}
inline int min(int a, int b){return a < b ? a : b;}
inline int abs(int x){return x < 0 ? -x : x;}
inline void swap(int &x, int &y){int tmp = x;x = y;y = tmp;}inline void read(int &x)
{x = 0;char ch = getchar(), c = ch;while(ch < '0' || ch > '9') c = ch, ch = getchar();while(ch <= '9' && ch >= '0') x = x * 10 + ch - '0', ch = getchar();if(c == '-') x = -x;
}
const int INF = 0x3f3f3f3f;
const int MAXN = 3000 + 10;
const int MAXM = 10000 + 10;
const double eps = 0.000000001;
struct Edge
{int u,v,nxt;double w;Edge(int _u, int _v, double _w, int _nxt){u = _u, v = _v, w = _w, nxt = _nxt;}Edge(){}
}edge[MAXM << 1];
int head[MAXN], cnt, vis[MAXN], n, m, sum, flag;
double d[MAXN];
inline void insert(int a, int b, double c)
{edge[++ cnt] = Edge(a, b, c, head[a]), head[a] = cnt;
}
void dfs(int x)
{if(flag) return;vis[x] = 1;for(int pos = head[x];pos;pos = edge[pos].nxt){int v = edge[pos].v;if(d[v] > d[x] + edge[pos].w){if(vis[v]){flag = 1;break;}d[v] = d[x] + edge[pos].w;dfs(v);}}vis[x] = 0;
}
int main()
{read(n), read(m);for(int i = 1;i <= m;++ i){int tmp1, tmp2;double tmp3;read(tmp1), read(tmp2), scanf("%lf", &tmp3);insert(tmp1, tmp2, tmp3);sum += abs(tmp3);}double l = -sum, r = sum, mid, ans;while(r - l >= eps){mid = (l + r) / 2;flag = 0;for(int i = 1;i <= cnt;++ i) edge[i].w -= mid;for(int i = 1;i <= n;++ i){memset(d, 0, sizeof(d));dfs(i);if(flag) break;}if(flag) r = mid;else l = mid, ans = mid;for(int i = 1;i <= cnt;++ i) edge[i].w += mid;}printf("%.8lf", ans);return 0;
}

转载于:https://www.cnblogs.com/huibixiaoxing/p/8544858.html

BZOJ1486: [HNOI2009]最小圈相关推荐

  1. bzoj千题计划227:bzoj1486: [HNOI2009]最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...

  2. [HNOI2009]最小圈 (二分答案+负环)

    题面:[HNOI2009]最小圈 题目描述: 考虑带权的有向图\(G=(V,E)\)以及\(w:E\rightarrow R\),每条边\(e=(i,j)(i\neq j,i\in V,j\in V) ...

  3. 【bzoj1486】[HNOI2009]最小圈 分数规划+Spfa

    题目描述 样例输入 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 样例输出 3.66666667 题解 分数规划+Spfa判负环 二分答案mid,并将所有边权减去mid,然后再判 ...

  4. 【BZOJ 1486】 [HNOI2009]最小圈

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 我们可以只想那个均值最小的环. 我们不知道那个环由哪些边构成 但我们可以把每条边都减掉mid 那个环受到的影响是什么呢? 如果这个均 ...

  5. 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划

    洛谷4951 地震 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #define ...

  6. BZOJ 1486 最小圈(二分+判负环)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1486 题意:给出一个有向图,边有权值.找到一个环,使得环上边的权值之和除以环上边的个数最 ...

  7. [USACO]地震 (二分答案+最优比率生成树详解)

    题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...

  8. 清北学堂学习笔记 第一期

    Day 1 1.贪心的奇怪方法:调整法 调整法,顾名思义,就是用别的方式进行题目的分析以及证明,例如说luogu的最大乘积.这种题目的主要分析思路为:先考虑一些简单的情况,通过简单的情况来推出一些有用 ...

  9. 【QBXT】学习笔记——Day3/4图论+dp

    继续上传一波笔记吧. Day3 1.16AM 今天讲图论,以习题为主. 开篇水题: 给一幅图,若删去一个点后变成一棵树,则这个点合法.问哪些点合法. 思路根据树的性质:这个点不是割点,m-这个点的度数 ...

  10. 浅析代码圈复杂度及认知复杂度

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. QQ群功能设计与心理学
  2. DFTug - Getting Started(下篇)
  3. div中定义局部变量_说说 Go 中的变量(附粗制滥造面试题)
  4. Oracel中连接的总结(一)
  5. Android用GSon处理Json数据
  6. Apache Doris : 一个开源 MPP 数据库的架构与实践
  7. 在matlab中输出、读取多个文件
  8. Chemical table CFR500 div2D(并查集)
  9. linux自动化作业安排工具cron anacron at batch (2)
  10. (4)Jquery1.8.3快速入门_基本选择器
  11. Android 官方独立 adb / fastboot 工具包
  12. GISer开发者的技能清单
  13. Meyer Burger获中国客户1800万瑞士法郎光伏设备订单
  14. 【Pandas学习笔记Task05】:变形
  15. Enhancement .
  16. 二分答案——洛谷P2440木材加工
  17. JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题的解决方法
  18. 02 固定效应模型与Stata实现
  19. 台式计算机网卡型号怎么查找,台式机无线网卡如何查看型号
  20. unity学习途中奇奇怪怪的问题——Unity打不开VS的问题

热门文章

  1. Linux 探索之旅 | 第五部分第七课:Shell 实现图片展示网页
  2. 一个真实的实例: Java程序员的成长经历
  3. Juniper设备管理
  4. Daily Scrum8, Oct. 12th
  5. 信息安全等级保护工作概述
  6. mysql安装手册(2)
  7. CTO 指名点姓让我带头冲锋,熬了一个通宵,终于把Redis中7千万个Key删完了
  8. 面试百度、阿里、腾讯,这134道Java面试题你会多少?
  9. 从滴滴亏109亿说起
  10. 腾讯亿级排行榜系统实践及挑战