bzoj1486
这里学了一个新知识叫分数规划
这道题目是求∑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
- const eps=1e-9;
- type node=record
- po,next:longint;
- len:extended;
- end;
- var w:array[..] of node;
- p:array[..] of longint;
- d:array[..] of extended;
- v:array[..] of boolean;
- x,y,n,m,i,len:longint;
- z,l,r,mid:extended;
- procedure add(x,y:longint;z:extended);
- begin
- inc(len);
- w[len].po:=y;
- w[len].len:=z;
- w[len].next:=p[x];
- p[x]:=len;
- end;
- function dfs(x:longint):boolean;
- var i,y:longint;
- begin
- v[x]:=true;
- i:=p[x];
- while i<> do
- begin
- y:=w[i].po;
- if d[y]>d[x]+w[i].len-mid then
- begin
- if not v[y] then
- begin
- d[y]:=d[x]+w[i].len-mid;
- if dfs(y) then exit(true)
- end
- else exit(true);
- end;
- i:=w[i].next;
- end;
- v[x]:=false;
- exit(false);
- end;
- function check:boolean;
- var i:longint;
- begin
- for i:= to n do
- d[i]:=;
- fillchar(v,sizeof(v),false);
- for i:= to n do
- if dfs(i) then exit(true);
- exit(false);
- end;
- begin
- readln(n,m);
- l:=;
- r:=-;
- for i:= to m do
- begin
- readln(x,y,z);
- add(x,y,z);
- if z>r then r:=z;
- if z<l then l:=z;
- end;
- while l+eps<r do
- begin
- mid:=(l+r)/;
- if check then r:=mid
- else l:=mid;
- end;
- writeln(l::);
- end.
bzoj1486的更多相关文章
- 【bzoj1486】 HNOI2009—最小圈
http://www.lydsy.com/JudgeOnline/problem.php?id=1486 (题目链接) 题意 给出一张有向图,规定一个数值u表示图中一个环的权值/环中节点个数.求最小的 ...
- 【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 ...
- BZOJ1486 HNOI2009 最小圈 【01分数规划】
BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...
- 【BZOJ1486】最小圈(分数规划)
[BZOJ1486]最小圈(分数规划) 题面 BZOJ 洛谷 求图中边权和除以点数最小的环 题解 分数规划 二分答案之后将边权修改为边权减去二分值 检查有无负环即可 #include<iostr ...
- bzoj1486: [HNOI2009]最小圈
二分+dfs. 这道题求图的最小环的每条边的权值的平均值μ. 这个平均值是大有用处的,求它我们就不用记录这条环到底有几条边构成. 如果我们把这个图的所有边的权值减去μ,就会出现负环. 所以二分求解. ...
- 【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- bzoj千题计划227:bzoj1486: [HNOI2009]最小圈
http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- 分数规划(Bzoj1486: [HNOI2009]最小圈)
题面 传送门 分数规划 分数规划有什么用? 可以把带分数的最优性求解式化成不带除发的运算 假设求max{\(\frac{a}{b},b>0\)} 二分一个权值\(k\) 令\(\frac{a}{ ...
随机推荐
- Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)
Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...
- 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 ...
- mybatis()
---------------------------------mysql分页---------------------------------- public void selectList(in ...
- leetcode problem (2-4)
Problem 2 --- Add Two Numbers 简单的模拟题. Problem 3 --- Longest Substring Without Repeating Characters 题 ...
- github 查看单个文件的历史记录命令
gitk 安装: apt-get install gitk 点击打开链接http://stackoverflow.com/questions/278192/view-the-change-histor ...
- 互联网HTTP连接等出错代码大全
100 - Continue 101 - Switching Protocols Success Codes 200 - OK 201 - Created 202 - Accepted 20 ...
- Linux命令 &与&&的作用
1.ls &表示后台服务 2.ls && ll 表示前者执行成功,执行后台命令
- python 三分钟入门
1.Python环境配置(2.7版本): Python官网:https://www.python.org/ Pycharm官网 http://www.jetbrains.com/pycharm/dow ...
- python分割sql文件
之前用joomla帮一学校做了个网站,然后要部署到他们到服务器上,他们只提供了sftp和phpmyadmin的账号,上传网站文件倒是挺顺利的,但后来用phpmyadmin导入mysql数据就遇到问题了 ...
- C# 判断中文字符(字符串)
在unicode 字符串中,中文的范围是在4E00..9FFF:CJK Unified Ideographs.通过对字符的unicode编码进行判断来确定字符是否为中文.protected bool ...