BZOJ3130: [Sdoi2013]费用流(二分,最大流)
Description
Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识。
    最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量。一个合法的网络流方案必须满足:(1)每条边的实际流量都不超过其最大流量且非负;(2)除了源点S和汇点T之外,对于其余所有点,都满足该点总流入流量等于该点总流出流量;而S点的净流出流量等于T点的净流入流量,这个值也即该网络流方案的总运输量。最大流问题就是对于给定的运输网络,求总运输量最大的网络流方案。
上图表示了一个最大流问题。对于每条边,右边的数代表该边的最大流量,左边的数代表在最优解中,该边的实际流量。需要注意到,一个最大流问题的解可能不是唯一的。 对于一张给定的运输网络,Alice先确定一个最大流,如果有多种解,Alice可以任选一种;之后Bob在每条边上分配单位花费(单位花费必须是非负实数),要求所有边的单位花费之和等于P。总费用等于每一条边的实际流量乘以该边的单位花费。需要注意到,Bob在分配单位花费之前,已经知道Alice所给出的最大流方案。现茌Alice希望总费用尽量小,而Bob希望总费用尽量大。我们想知道,如果两个人都执行最优策略,最大流的值和总费用分别为多少。
Input
第一行三个整数N,M,P。N表示给定运输网络中节点的数量,M表示有向边的数量,P的含义见问题描述部分。为了简化问题,我们假设源点S是点1,汇点T是点N。
    接下来M行,每行三个整数A,B,C,表示有一条从点A到点B的有向边,其最大流量是C。
Output
第一行一个整数,表示最大流的值。
第二行一个实数,表示总费用。建议选手输出四位以上小数。
Sample Input
1 2 10
2 3 15
Sample Output
10.0000
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
const double oo=(double)(0x3f3f3f3f);
const double eps=1e-;
struct pnt{
int hd;
int lyr;
int now;
}p[];
struct ent{
int twd;
int lst;
double vls;
double his;
}e[];
int cnt;
int n,m;
int s,t;
std::queue<int>Q;
void ade(int f,int t,double v)
{
cnt++;
e[cnt].twd=t;
e[cnt].vls=v;
e[cnt].his=v;
e[cnt].lst=p[f].hd;
p[f].hd=cnt;
return ;
}
bool Bfs(void)
{
while(!Q.empty())Q.pop();
for(int i=;i<=t;i++)
p[i].lyr=;
p[s].lyr=;
Q.push(s);
while(!Q.empty())
{
int x=Q.front();
Q.pop();
for(int i=p[x].hd;i;i=e[i].lst)
{
int to=e[i].twd;
if(p[to].lyr==&&e[i].vls>eps)
{
p[to].lyr=p[x].lyr+;
if(to==t)
return true;
Q.push(to);
}
}
}
return false;
}
double Dfs(int x,double fll)
{
if(x==t)
return fll;
for(int& i=p[x].now;i;i=e[i].lst)
{
int to=e[i].twd;
if(p[to].lyr==p[x].lyr+&&e[i].vls>eps)
{
double ans=Dfs(to,std::min(fll,e[i].vls));
if(ans>eps)
{
e[i].vls-=ans;
e[((i-)^)+].vls+=ans;
return ans;
}
}
}
return 0.00;
}
double Dinic(void)
{
double ans=0.00;
while(Bfs())
{
for(int i=;i<=t;i++)
p[i].now=p[i].hd;
double dlt;
while((dlt=Dfs(s,oo))>eps)
ans+=dlt;
}
return ans;
}
bool check(double maxflow,double x)
{
for(int i=;i<=cnt;i++)
e[i].vls=std::min(e[i].his,x);
double ans=Dinic();
return maxflow-ans<=eps;
}
int main()
{
// freopen("a.in","r",stdin);
double pri;
scanf("%d%d",&n,&m);
s=,t=n;
scanf("%lf",&pri);
for(int i=;i<=m;i++)
{
int a,b;
double c;
scanf("%d%d",&a,&b);
scanf("%lf",&c);
ade(a,b,c);
ade(b,a,);
}
double maxflow=Dinic();
printf("%.0lf\n",maxflow);
double l=0.00,r=oo;
while(r-l>eps)
{
double mid=(l+r)/2.00;
if(check(maxflow,mid))
r=mid;
else
l=mid;
}
printf("%.4lf\n",pri*l);
return ;
}
BZOJ3130: [Sdoi2013]费用流(二分,最大流)的更多相关文章
- BZOJ3130: [Sdoi2013]费用流[最大流 实数二分]
		
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 960 Solved: 5 ...
 - bzoj千题计划133:bzoj3130: [Sdoi2013]费用流
		
http://www.lydsy.com/JudgeOnline/problem.php?id=3130 第一问就是个最大流 第二问: Bob希望总费用尽量大,那肯定是把所有的花费加到流量最大的那一条 ...
 - BZOJ3130 [Sdoi2013]费用流  【网络流 + 二分】
		
题目 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络流方案必须满足:(1)每 ...
 - 【二分答案】【最大流】bzoj3130 [Sdoi2013]费用流
		
二分最大的边的cap,记作Lim. 把所有的边的cap设为min(Lim,cap[i]). Bob一定会把单位费用加到最大边上. #include<cstdio> #include< ...
 - BZOJ3130 [Sdoi2013]费用流
		
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3130 这题codevs上也有,不过数据挂了[要A得看discuss]. 题目大意: Ali ...
 - BZOJ-3130    费用流 (听题目胡扯丶裸最大流)      二分判定+最大流+实数精度乱搞
		
DCrusher爷喜欢A我做的水题,没办法,只能A他做不动的题了.... 3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec ...
 - 【BZOJ3130】费用流(最大流,二分)
		
[BZOJ3130]费用流(最大流,二分) 题面 Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一 ...
 - BZOJ 3130: [Sdoi2013]费用流 网络流+二分
		
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1230 Solved: ...
 - P3305 [SDOI2013]费用流
		
题目描述 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量. 一个合法的网络流方案必须满足: ...
 
随机推荐
- Dubbo分布式服务框架入门(附project)
			
要想了解Dubbo是什么,我们不防先了解它有什么用. 使用场景:比方我想开发一个网上商城项目.这个网上商城呢,比較复杂.分为pc端web管理后台.微信端销售公众号,那么我们分成四个项目,pc端站点,微 ...
 - 在 Win8.1 上安装 Dedup
			
install-package Microsoft-Windows-ServerCore-FullServer-Package~31bf3856ad364e35~amd64~~6.3.9600.163 ...
 - video : Write and Submit your first Linux kernel Patch
			
http://v.youku.com/v_show/id_XNDMwNzc3MTI4.html After working with Linux (mostly as an advanced user ...
 - 海思 3520D 移植Qt4.5.3 一
			
一.移植Qt4.5.3 1.获得 Qt4.5.3 的源码Qt4.5.3源码的原始包 qt-embedded-opensource-src-4.5.3.tar.gz 将其复制到 /opt 下, ...
 - ConfigurationSection
			
https://msdn.microsoft.com/en-us/library/system.configuration.configurationsection(v=vs.110).aspx Re ...
 - django session深入
			
转至原文 https://www.cnblogs.com/zhaof/p/6281468.html 基于cookie做用户验证时:敏感信息不适合放在cookie中 session依赖cookie s ...
 - [SDOI2010] 古代猪文 (快速幂+中国剩余定理+欧拉定理+卢卡斯定理) 解题报告
			
题目链接:https://www.luogu.org/problemnew/show/P2480 题目背景 “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色 ...
 - Android项目实战(五十七):Glide 高斯模糊效果
			
核心需要高斯模糊的库 compile 'jp.wasabeef:glide-transformations:2.0.1' 针对于3.7的版本 使用方法为: //加载背景, Glide.with(Mus ...
 - button click event in jqxgrid jqwidgets
			
button click event in jqxgrid jqwidgets http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/p ...
 - jsLittle源码封装对象合并
			
JSLi.extend = JSLi.fn.extend = function () { var options, name, src, copy, target = arguments[0],i = ...