1486: [HNOI2009]最小圈

Time Limit: 10 Sec  Memory Limit: 64 MB

Submit: 1778  Solved: 827

[Submit][Status][Discuss]

Description

Input

Output

Sample Input

Sample Output

HINT

Source

01分数规划+二分答案+spfa判负环

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<algorithm>
  7. #define F(i,j,n) for(int i=j;i<=n;i++)
  8. #define D(i,j,n) for(int i=j;i>=n;i--)
  9. #define ll long long
  10. #define maxn 3005
  11. #define maxm 10005
  12. #define inf 1000000000
  13. #define eps 1e-9
  14. using namespace std;
  15. struct edge{int next,to;double v,w;}e[maxm];
  16. int n,m,cnt,head[maxn];
  17. double dis[maxn];
  18. bool flag,mark[maxn];
  19. inline int read()
  20. {
  21. int x=0,f=1;char ch=getchar();
  22. while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
  23. while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  24. return x*f;
  25. }
  26. inline void add_edge(int x,int y)
  27. {
  28. e[++cnt].next=head[x];
  29. e[cnt].to=y;
  30. head[x]=cnt;
  31. }
  32. inline void spfa(int x)
  33. {
  34. if (mark[x]){flag=true;return;}
  35. mark[x]=true;
  36. for(int i=head[x],y;i;i=e[i].next)
  37. if (dis[x]+e[i].v<dis[y=e[i].to])
  38. {
  39. dis[y]=dis[x]+e[i].v;
  40. spfa(y);
  41. if (flag) return;
  42. }
  43. mark[x]=false;
  44. }
  45. inline bool judge()
  46. {
  47. F(i,1,n) dis[i]=mark[i]=0;
  48. flag=false;
  49. F(i,1,n)
  50. {
  51. spfa(i);
  52. if (flag) return true;
  53. }
  54. return false;
  55. }
  56. int main()
  57. {
  58. n=read();m=read();
  59. int x,y;double z,l=inf,r=-inf,mid;
  60. F(i,1,m)
  61. {
  62. x=read();y=read();scanf("%lf",&z);
  63. add_edge(x,y);
  64. e[i].w=z;
  65. l=min(l,z);
  66. r=max(r,z);
  67. }
  68. while (r-l>=eps)
  69. {
  70. mid=(l+r)/2;
  71. F(i,1,m) e[i].v=e[i].w-mid;
  72. if (judge()) r=mid;
  73. else l=mid;
  74. }
  75. printf("%.8lf\n",l);
  76. return 0;
  77. }

bzoj1486【HNOI2009】最小圈的更多相关文章

  1. BZOJ1486 HNOI2009 最小圈 【01分数规划】

    BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...

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

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

  3. bzoj1486: [HNOI2009]最小圈

    二分+dfs. 这道题求图的最小环的每条边的权值的平均值μ. 这个平均值是大有用处的,求它我们就不用记录这条环到底有几条边构成. 如果我们把这个图的所有边的权值减去μ,就会出现负环. 所以二分求解. ...

  4. 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)

    传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...

  5. 分数规划(Bzoj1486: [HNOI2009]最小圈)

    题面 传送门 分数规划 分数规划有什么用? 可以把带分数的最优性求解式化成不带除发的运算 假设求max{\(\frac{a}{b},b>0\)} 二分一个权值\(k\) 令\(\frac{a}{ ...

  6. BZOJ1486:[HNOI2009]最小圈(最短路,二分)

    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 Sol ...

  7. [bzoj1486][HNOI2009]最小圈——分数规划+spfa+负环

    题目 传送门 题解 这个题是一个经典的分数规划问题. 把题目形式化地表示,就是 \[Minimize\ \lambda = \frac{\sum W_{i, i+1}}{k}\] 整理一下,就是 \[ ...

  8. 【BZOJ1486】[HNOI2009]最小圈 分数规划

    [BZOJ1486][HNOI2009]最小圈 Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 Samp ...

  9. bzoj 1486: [HNOI2009]最小圈 dfs求负环

    1486: [HNOI2009]最小圈 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1022  Solved: 487[Submit][Status] ...

  10. BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )

    二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...

随机推荐

  1. uwsgs loading shared libraries: libicui18n.so.58 异常处理

    背景 想使用 ningx + uwsgi + flask 搭建 python 应用环境 Python使用的是anaconda3(pyhton 3.6) 依赖包安装完毕,但是执行 uwsgi 的时候出现 ...

  2. 我的java web之路(安装)

    所有的软件下载完,陪完jdk之后,迎来了一系列的安装工作... 1.安装SQL Server 2005 首先,打开ISS功能,控制面板->程序->打开或关闭windows功能 注意红框内的 ...

  3. 杭电 1241 Oil Deposits (很好的dfs)

    Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...

  4. xtu read problem training 2 B - In 7-bit

    In 7-bit Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on ZJU. Original ID: 3 ...

  5. 79. could not initialize proxy - no Session 【从零开始学Spring Boot】

    [原创文章,转载请注明出处] Spring与JPA结合时,如何解决懒加载no session or session was closed!!! 实际上Spring Boot是默认是打开支持sessio ...

  6. 洛谷P3973 - [TJOI2015]线性代数

    Portal Description 给定一个\(n\times n\)的矩阵\(B\)和一个\(1×n\)的矩阵\(C\).求出一个\(1×n\)的01矩阵\(A\),使得\(D=(A×B-C)×A ...

  7. leetcode之twosum

    class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector& ...

  8. 从零开始写STL-二叉搜索树

    二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的 ...

  9. 寒武纪camp Day4

    补题进度:7/11 A(博弈论) 略 B 待填坑 C(贪心) 题意: 一个序列是good的当且仅当相邻两个数字不相同.给出一个长度为n的数列,每个数字是ai.定义一种操作就是把a中某个元素拿到首位去, ...

  10. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...