bzoj3130
这道题要谈很多;
首先,第一问等会我另外说一下;
第二问比较难想,首先我们的考虑两人的最优策略是什么
对于Bob,我们令分配了x条边的费用,则我们要最大化
ans=Σ(i=1 to x) flow[i] * p/x (flow[i]为选择的边)
显然ans<=x*maxflow[i]*p/x=maxflow[i]*p
显然ans最大的方案就是将费用全部分配到实际流量最大的那条边上去
这样Alice的方案也明确了,就是在维持最大流不变的前提下,是实际流量最大的那条边最小
对于这类最小化最大的问题,我们不难想到二分答案,二分网络流上界流量
但请注意,有没有从题目保留的精度想到什么呢?
对,这道题流量可以是实数,
对于任意实数的网络流是不可做的,但是在一定精度范围内就照样可行;
照样就没什么问题了
这里说下我发现我以前写的最大流sap是不够好的
没加当前弧优化,之前很多题没TLE真是万幸;
在bzoj2127(之后放在一个专题写)中体现的特别明显,如果只用sap+gap妥妥TLE
用了之后1s多跑完……
这里给出最终的最大流写法(sap+gap+cur)
const inf=;
ok=1e-6; //控制精读
type node=record
next,point:longint;
flow:double;
end; var edge:array[..] of node;
cur,numh,p,h,pre:array[..] of longint;
w,x,y:array[..] of longint;
d:array[..] of double;
l,r,mid,ans1,ans2:double;
t,len,i,n,m:longint; function min(a,b:double):double;
begin
if a>b then exit(b) else exit(a);
end; procedure add(x,y:longint;f:double);
begin
inc(len);
edge[len].flow:=f;
edge[len].point:=y;
edge[len].next:=p[x];
p[x]:=len;
end; function sap(k:double):double; //带当前弧优化
var u,i,j,tmp,q:longint;
neck:double;
flag:boolean;
begin
len:=-;
fillchar(p,sizeof(p),);
for i:= to m do
begin
add(x[i],y[i],min(k,w[i]));
add(y[i],x[i],);
end;
fillchar(numh,sizeof(numh),);
fillchar(h,sizeof(h),);
numh[]:=n;
u:=;
neck:=inf;
sap:=;
cur:=p;
while h[]<n do
begin
d[u]:=neck;
flag:=false;
i:=cur[u];
while i<>- do
begin
j:=edge[i].point;
if (edge[i].flow>) and (h[u]=h[j]+) then
begin
flag:=true;
cur[u]:=i;
pre[j]:=u;
neck:=min(neck,edge[i].flow);
u:=j;
if u=n then
begin
sap:=sap+neck;
while u<> do
begin
u:=pre[u];
j:=cur[u];
edge[j].flow:=edge[j].flow-neck;
edge[j xor ].flow:=edge[j xor ].flow+neck;
end;
neck:=inf; //勿忘1
end;
break;
end;
i:=edge[i].next;
end;
if not flag then
begin
dec(numh[h[u]]);
if numh[h[u]]= then exit;
tmp:=n;
i:=p[u];
q:=;
while i<>- do
begin
j:=edge[i].point;
if (tmp>h[j]) and (edge[i].flow>) then
begin
q:=i;
tmp:=h[j];
end;
i:=edge[i].next;
end;
h[u]:=tmp+;
cur[u]:=q; //勿忘2
inc(numh[h[u]]);
if u<> then
begin
u:=pre[u];
neck:=d[u]; //记录当前瓶颈边的作用
end;
end;
end;
end; begin
readln(n,m,t);
for i:= to m do
begin
readln(x[i],y[i],w[i]);
if r<w[i] then r:=w[i];
end;
l:=;
ans1:=sap(r);
while r-l>ok do //实数范围内的二分答案
begin
mid:=(l+r)/;
if abs(ans1-sap(mid))<ok then r:=mid
else l:=mid;
end;
writeln(ans1::);
writeln(r*t::);
end.
bzoj3130的更多相关文章
- 【BZOJ3130】费用流(最大流,二分)
[BZOJ3130]费用流(最大流,二分) 题面 Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一 ...
- 【二分答案】【最大流】bzoj3130 [Sdoi2013]费用流
二分最大的边的cap,记作Lim. 把所有的边的cap设为min(Lim,cap[i]). Bob一定会把单位费用加到最大边上. #include<cstdio> #include< ...
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
- BZOJ-3130 费用流 (听题目胡扯丶裸最大流) 二分判定+最大流+实数精度乱搞
DCrusher爷喜欢A我做的水题,没办法,只能A他做不动的题了.... 3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec ...
- BZOJ3130 [Sdoi2013]费用流
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3130 这题codevs上也有,不过数据挂了[要A得看discuss]. 题目大意: Ali ...
- luogu3305/bzoj3130 费用流 (二分答案+dinic)
Bob肯定想挑一个流量最大的边,然后把所有的费用都加给它呗 那Alice就让流量最大的边尽量小呗 那就二分一下答案再dinic呗 #include<bits/stdc++.h> #defi ...
- bzoj千题计划133:bzoj3130: [Sdoi2013]费用流
http://www.lydsy.com/JudgeOnline/problem.php?id=3130 第一问就是个最大流 第二问: Bob希望总费用尽量大,那肯定是把所有的花费加到流量最大的那一条 ...
- 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流
题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...
- BZOJ3130 [Sdoi2013]费用流 【网络流 + 二分】
题目 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络流方案必须满足:(1)每 ...
随机推荐
- Kafka-0.10.0.0入门
搭建环境略(伪集群即可以),但要注意Kafka的配置必须配置的,少配了也一样可以用,但是只能单机使用,外部机器无法连接,网上也有说. host.name=192.168.1.30 advertised ...
- 15_CXF和Spring开发手机号查询网站
[整体分析] [生成客户端代码] wsdl网址: http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx 生成的客户端代码 [工程截图(已拷入客户端 ...
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏[汇总]
目前有两种方式可用于解决: 1. 微软官方的一个解决方案: http://support.microsoft.com/kb/320216/zh-cn 发现是嵌入清单的问题,于是对该工程以及所有依赖工程 ...
- bzoj 2734 [HNOI2012]集合选数 状压DP+预处理
这道题很神啊…… 神爆了…… 思路大家应该看别的博客已经知道了,但大部分用的插头DP.我加了预处理,没用插头DP,一行一行来,速度还挺快. #include <cstdio> #inclu ...
- OpenJudge / Poj 1928 The Peanuts C++
链接地址:http://bailian.openjudge.cn/practice/1928 题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 Mr. Robinson and h ...
- OpenSUSE共享网络
因为想要使用Arduino Ethernet扩展版,想要搭建一个局域网供其使用有线,无奈路由器离我太远.遂有本文. 实验器材: 装有OpenSUSE.有线网卡.无线网卡的笔记本. 路由器一台. 实验步 ...
- 【转】怎样将DataGridView中绑定的表的列名改成中文
在DataGridView设置数据源绑定后,设置DataGridView的属性HeaderText就可以了.代码参考: dataGridView.Columns[filedName].HeaderTe ...
- 51nod1046快速幂取余
给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整数A B C,中间用空格分隔.(1 <= A,B,C <= 10^ ...
- php获取汉字首字母的函数
本文介绍用php实现汉字转化为首字母的方法,主要功能是:功能明确,易于修改维护和扩展: 英文的字串:不变返回(包括数字):中文字符串:返回拼音首字符: 中英混合串: 返回拼音首字符和英文. 网上的方法 ...
- Dreamweaver 添加 cakephp ctp后缀名
Dreamweaver 默认是不支持ctp文件高亮的,即使用Dreamweaver打开ctp文件,也只能像记事本一样编辑 但是我们可以通过修改两个文件,来添加Dreamweaver对ctp文件的扩展支 ...