https://www.lydsy.com/JudgeOnline/problem.php?id=3130

本来找费用流的题,权当复习一下网络流好了。

有点麻烦的是double,干脆判断大小或者二分增加下限都用eps=1e-8操作好了(毕竟只要求精确到4位)。

我普通最大流都快忘了,板子写错了一次超时了。

网络流板子的细节要记清楚:1.增广的时候访问完哪个点就把dep标记改为-1防止同一次增广再次访问。2.往下层传递的时候用val-cnt而不是val。3.cnt=val时及时返回。

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
const double eps=1e-;
int n,m,p;double mx;
struct nod{
int y,rev,next;double v,v1;
}e[maxn*];
int head[maxn]={},tot=;double Ans=;
int num[maxn]={},vis[maxn*]={};
queue<int>q;
void init(int x,int y,double v){
e[++tot].y=y;e[tot].v=v;e[tot].rev=tot+;e[tot].next=head[x];head[x]=tot;
e[++tot].y=x;e[tot].v=;e[tot].rev=tot-;e[tot].next=head[y];head[y]=tot;
}
bool fir(){
memset(num,-,sizeof(num));
q.push();num[]=;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].next){
if(e[i].v1<eps)continue;
if(num[e[i].y]==-){
num[e[i].y]=num[x]+;
q.push(e[i].y);
}
}
}
return num[n]!=-;
}
double dfs(int x,double val){
if(x==n)return val;
double cnt=,z;
for(int i=head[x];i;i=e[i].next){
if((e[i].v1<eps)||num[e[i].y]!=num[x]+)continue;
z=dfs(e[i].y,min(val-cnt,e[i].v1));
cnt+=z; e[i].v1-=z; e[e[i].rev].v1+=z;
if(val-cnt<eps)return cnt;
}num[x]=-;
return cnt;
}
bool Check(double shu){
mx=shu;double cnt=;
for(int i=;i<tot;i+=)e[i].v1=min(mx,e[i].v);
for(int i=;i<=tot;i+=)e[i].v1=;
while(fir()){
cnt+=dfs(,);
}
return Ans-cnt<eps;
}
double erfen(double mx){
double l=,r=mx;
while(r-l>eps){
double mid=(l+r)/;
if(Check(mid))r=mid;
else l=mid+eps;
}
return l;
}
int main(){
scanf("%d%d%d",&n,&m,&p);
int x,y,z;
for(int i=;i<=m;i++){scanf("%d%d%d",&x,&y,&z);init(x,y,(double)z);mx=max(mx,(double)z);}
for(int i=;i<=tot;i++)e[i].v1=e[i].v;
while(fir())Ans+=dfs(,mx);
if(Ans==){
printf("0\n0.0000\n");
}
else{
printf("%.0f\n",Ans);
printf("%.4lf\n",erfen(mx)*(double)p);
}
return ;
}

BZOJ 3130: [Sdoi2013]费用流 网络流 二分 最大流的更多相关文章

  1. BZOJ 3130: [Sdoi2013]费用流 网络流+二分

    3130: [Sdoi2013]费用流 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1230  Solved: ...

  2. bzoj 3130 [Sdoi2013]费用流(二分,最大流)

    Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识.    最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...

  3. BZOJ 3130 [Sdoi2013]费用流 ——网络流

    [题目分析] 很容易想到,可以把P放在流量最大的边上的时候最优. 所以二分网络流,判断什么时候可以达到最大流. 流量不一定是整数,所以需要实数二分,整数是会WA的. [代码] #include < ...

  4. bzoj 3130: [Sdoi2013]费用流

    #include<cstdio> #include<iostream> #define M 10000 #define inf 0x7fffffff #include<c ...

  5. POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流)

    POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流) Description Yo ...

  6. 3130: [Sdoi2013]费用流

    Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络流方案 ...

  7. BZOJ 3993 [SDOI2015]星际战争 | 网络流 二分答案

    链接 BZOJ 3993 题解 这道题挺棵的-- 二分答案t,然后源点向武器连t * b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行. #inc ...

  8. BZOJ 2406: 矩阵 [上下界网络流 二分答案]

    2406: 矩阵 题意:自己去看吧,最小化每行每列所有元素与给定矩阵差的和的绝对值中的最大值 又带绝对值又带max不方便直接求 显然可以二分这个最大值 然后判定问题,给定矩阵每行每列的范围和每个元素的 ...

  9. BZOJ 1305:dance跳舞(二分+最大流)

    一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”).每个男孩 ...

随机推荐

  1. js工作常见问题收集

    1. viewport <meta name="viewport" content="width=device-width,initial-scale=1.0,mi ...

  2. 用jquery的ajax方法获取不到return返回值

    如果jquery中,获取不到ajax返回值. 两个错误写法会导致这种情况:1.ajax未用同步 2.在ajax方法中直接return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第三种写法 ...

  3. 10 The Go Programming Language Specification go语言规范 重点

    The Go Programming Language Specification go语言规范 Version of May 9, 2018 Introduction 介绍 Notation 符号 ...

  4. Java线程的阻塞

    线程的阻塞 线程的优先级 线程总是存在优先级,优先级范围在1~10之间,线程默认优先级是5(数值越大优先级越高): JVM线程调度程序是基于优先级的抢先调度机制: 在大多数情况下,当前运行的线程优先级 ...

  5. Codeforces 264B Good Sequences(DP+素数筛)

    题目链接:http://codeforces.com/problemset/problem/264/B 题目大意:给出n个单调递增的数,让你找出最长的好序列,好序列是一种单调递增的并且相邻元素的最大公 ...

  6. HDU 3613 Best Reward(扩展KMP求前后缀回文串)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3613 题目大意: 大意就是将字符串s分成两部分子串,若子串是回文串则需计算价值,否则价值为0,求分割 ...

  7. Java多线程-Java多线程概述

    第一章 Java多线程概述 线程的启动 线程的暂停 线程的优先级 线程安全相关问题 1.1 进程与线程 进程:可以将运行在内存中的程序(如exe文件)理解为进程,进程是受操作系统管理的基本的运行单元. ...

  8. Apache Kylin安装部署

    0x01 Kylin安装环境 Kylin依赖于hadoop大数据平台,安装部署之前确认,大数据平台已经安装Hadoop, HBase, Hive. 1.1 了解kylin的两种二进制包 预打包的二进制 ...

  9. Ninject中调用webapi卡住的情况解决

    过年这两天在家做项目,把mvc升级到了5.1,webapi升级到了2.1,忽然发现一个问题,在某些页面上ajax调用webapi时会发现卡死现象,CPU也没有被占用,就是网页一些在加载也不报错,经过2 ...

  10. CF GYM100548 (相邻格子颜色不同的方案数 2014西安现场赛F题 容斥原理)

    n个格子排成一行,有m种颜色,问用恰好k种颜色进行染色,使得相邻格子颜色不同的方案数. integers n, m, k (1 ≤n, m ≤ 10^9, 1 ≤ k ≤ 10^6, k ≤ n, m ...