这里学了一个新知识叫分数规划
这道题目是求∑w[i]/S最小
首先二分答案k,然后
如果某个环∑w[i]/S<=k即
∑w[i]<=k*S-->∑w[i]-k*S<=0--->∑(w[i]-k)<=0
所以对于原图每条边变为w[i]-k,如果存在负圈,那么k还可以更小,否则反之
判负环可以用spfa,而这里由于我们只要找到一个负圈即可
所以我们用dfs类型的spfa而不用bfs型
这里有关于spfa的dfs和bfs比较
http://wenku.baidu.com/link?url=D8kKnPDyfVfUbp7FlkM6PV484bd_ikEPvZnHkgwquiqapU4rlbgxUzsF1M9ck3pu7sBpQlwrERWsMoyWTRE7PacJ_zsAPliqlt07wKY-olO

  1. const eps=1e-9;
  2. type node=record
  3. po,next:longint;
  4. len:extended;
  5. end;
  6.  
  7. var w:array[..] of node;
  8. p:array[..] of longint;
  9. d:array[..] of extended;
  10. v:array[..] of boolean;
  11. x,y,n,m,i,len:longint;
  12. z,l,r,mid:extended;
  13.  
  14. procedure add(x,y:longint;z:extended);
  15. begin
  16. inc(len);
  17. w[len].po:=y;
  18. w[len].len:=z;
  19. w[len].next:=p[x];
  20. p[x]:=len;
  21. end;
  22.  
  23. function dfs(x:longint):boolean;
  24. var i,y:longint;
  25. begin
  26. v[x]:=true;
  27. i:=p[x];
  28. while i<> do
  29. begin
  30. y:=w[i].po;
  31. if d[y]>d[x]+w[i].len-mid then
  32. begin
  33. if not v[y] then
  34. begin
  35. d[y]:=d[x]+w[i].len-mid;
  36. if dfs(y) then exit(true)
  37. end
  38. else exit(true);
  39. end;
  40. i:=w[i].next;
  41. end;
  42. v[x]:=false;
  43. exit(false);
  44. end;
  45.  
  46. function check:boolean;
  47. var i:longint;
  48. begin
  49. for i:= to n do
  50. d[i]:=;
  51. fillchar(v,sizeof(v),false);
  52. for i:= to n do
  53. if dfs(i) then exit(true);
  54. exit(false);
  55. end;
  56.  
  57. begin
  58. readln(n,m);
  59. l:=;
  60. r:=-;
  61. for i:= to m do
  62. begin
  63. readln(x,y,z);
  64. add(x,y,z);
  65. if z>r then r:=z;
  66. if z<l then l:=z;
  67. end;
  68. while l+eps<r do
  69. begin
  70. mid:=(l+r)/;
  71. if check then r:=mid
  72. else l:=mid;
  73. end;
  74. writeln(l::);
  75. end.

bzoj1486的更多相关文章

  1. 【bzoj1486】 HNOI2009—最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 (题目链接) 题意 给出一张有向图,规定一个数值u表示图中一个环的权值/环中节点个数.求最小的 ...

  2. 【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 ...

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

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

  4. 【BZOJ1486】最小圈(分数规划)

    [BZOJ1486]最小圈(分数规划) 题面 BZOJ 洛谷 求图中边权和除以点数最小的环 题解 分数规划 二分答案之后将边权修改为边权减去二分值 检查有无负环即可 #include<iostr ...

  5. bzoj1486: [HNOI2009]最小圈

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

  6. 【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

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

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

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

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

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

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

随机推荐

  1. Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

    Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...

  2. RAC分解步骤之一,在oracle linux 4u4上安装oracle 10.2.0.1.0操作日志

    练习oracle的rac组建过程,第一步,先练习4u4上安装oracle 10.2.0.1.0.直接安装rac,有些难度.从简单的做起.总RAC步骤,参照小布老师的RAC组建. 1. 启动vc,登陆v ...

  3. mybatis()

    ---------------------------------mysql分页---------------------------------- public void selectList(in ...

  4. leetcode problem (2-4)

    Problem 2 --- Add Two Numbers 简单的模拟题. Problem 3 --- Longest Substring Without Repeating Characters 题 ...

  5. github 查看单个文件的历史记录命令

    gitk 安装: apt-get install gitk 点击打开链接http://stackoverflow.com/questions/278192/view-the-change-histor ...

  6. 互联网HTTP连接等出错代码大全

    100 - Continue  101 - Switching Protocols Success Codes  200 - OK  201 - Created  202 - Accepted  20 ...

  7. Linux命令 &与&&的作用

    1.ls &表示后台服务 2.ls && ll 表示前者执行成功,执行后台命令

  8. python 三分钟入门

    1.Python环境配置(2.7版本): Python官网:https://www.python.org/ Pycharm官网 http://www.jetbrains.com/pycharm/dow ...

  9. python分割sql文件

    之前用joomla帮一学校做了个网站,然后要部署到他们到服务器上,他们只提供了sftp和phpmyadmin的账号,上传网站文件倒是挺顺利的,但后来用phpmyadmin导入mysql数据就遇到问题了 ...

  10. C# 判断中文字符(字符串)

    在unicode 字符串中,中文的范围是在4E00..9FFF:CJK Unified Ideographs.通过对字符的unicode编码进行判断来确定字符是否为中文.protected bool  ...