即在总流量不变的情况下调整每条边的流量。显然先二分答案变为求最小费用。容易想到直接流量清空跑费用流,但复杂度略有些高。

  首先需要知道(不知道也行?)一种平时基本不用的求最小费用流的算法——消圈法。算法基于下面的定理:如果残量网络中有负环,当前费用流一定不是最小费用流(似乎很显然?)。注意到分数规划之后,我们需要知道的只是在调整边权后的网络里,最小费用流是否可能比原来更优,于是构造出残量网络,spfa判负环即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 5010
#define M 3010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
const double eps=1E-;
int n,m,p[N],t,q[N],cnt[N];
double dis[N];
bool flag[N];
struct data{int to,nxt;double len;
}edge[M<<];
void addedge(int x,int y,double z){t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;}
int inc(int &x){x++;if (x>n+) x-=n+;return x;}
bool spfa()
{
memset(flag,,sizeof(flag));
memset(cnt,,sizeof(cnt));
int head=,tail=;q[]=n-;
for (int i=;i<=n;i++) dis[i]=;dis[n-]=;
do
{
int x=q[inc(head)];flag[x]=;
for (int i=p[x];i;i=edge[i].nxt)
if (dis[x]+edge[i].len<dis[edge[i].to])
{
dis[edge[i].to]=dis[x]+edge[i].len;
if (!flag[edge[i].to])
{
flag[edge[i].to]=;
q[inc(tail)]=edge[i].to;
cnt[edge[i].to]++;
if (cnt[edge[i].to]>=n) return ;
}
}
}while (head!=tail);
return ;
}
bool check(double k)
{
for (int i=;i<=t;i++) edge[i].len+=k;
bool ans=spfa();
for (int i=;i<=t;i++) edge[i].len-=k;
return ans;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj3597.in","r",stdin);
freopen("bzoj3597.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read()+,m=read();
for (int i=;i<=m;i++)
{
int x=read(),y=read(),a=read(),b=read(),c=read(),d=read();
addedge(x,y,b+d);
if (c>) addedge(y,x,a-d);
}
double l=eps,r=,ans;
while (l+eps<r)
{
double mid=(l+r)/;
if (check(mid)) ans=mid,l=mid+eps;
else r=mid-eps;
}
printf("%.2f",ans);
return ;
}

BZOJ3597 SCOI2014方伯伯运椰子(分数规划+spfa)的更多相关文章

  1. [bzoj3597][scoi2014]方伯伯运椰子——分数规划,负环

    题解 目标就是 \[Maximize\ \lambda = \frac{X-Y}{k}\] 按照分数规划的一般规律, 构造: \[g(\lambda) = \lambda k + Y - X\] 由于 ...

  2. 洛谷3288 SCOI2014方伯伯运椰子(分数规划+spfa)

    纪念博客又一次爆炸了 首先,对于本题中,我们可以发现,保证存在正整数解,就表示一定费用会降低.又因为一旦加大的流量,费用一定会变大,所以总流量一定是不变的 那么我们这时候就需要考虑一个退流的过程 对于 ...

  3. 3597: [Scoi2014]方伯伯运椰子[分数规划]

    3597: [Scoi2014]方伯伯运椰子 Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 404  Solved: 249 [Submit][Sta ...

  4. bzoj3597[Scoi2014]方伯伯运椰子 01分数规划+spfa判负环

    3597: [Scoi2014]方伯伯运椰子 Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 594  Solved: 360[Submit][Statu ...

  5. 2019.03.28 bzoj3597: [Scoi2014]方伯伯运椰子(01分数规划)

    传送门 题意咕咕咕有点麻烦不想写 思路: 考虑加了多少一定要压缩多少,这样可以改造边. 于是可以通过分数规划+spfaspfaspfa解决. 代码: #include<bits/stdc++.h ...

  6. BZOJ3597 [Scoi2014]方伯伯运椰子 【二分 + 判负环】

    题目链接 BZOJ3597 题解 orz一眼过去一点思路都没有 既然是流量网络,就要借鉴网络流的思想了 我们先处理一下那个比值,显然是一个分数规划,我们二分一个\(\lambda = \frac{X ...

  7. Bzoj3597: [Scoi2014]方伯伯运椰子

    题面 传送门 Sol 消圈定理:如果一个费用流网络的残量网络有负环,那么这个费用流不优 于是这个题就可以建出残量网络,然后分数规划跑负环了 # include <bits/stdc++.h> ...

  8. bzoj 3597: [Scoi2014]方伯伯运椰子 0/1分数规划

    3597: [Scoi2014]方伯伯运椰子 Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 144  Solved: 78[Submit][Status ...

  9. bzoj 3597: [Scoi2014]方伯伯运椰子 [01分数规划 消圈定理 spfa负环]

    3597: [Scoi2014]方伯伯运椰子 题意: from mhy12345 给你一个满流网络,对于每一条边,压缩容量1 需要费用ai,扩展容量1 需要bi, 当前容量上限ci,每单位通过该边花费 ...

随机推荐

  1. Android学习之基础知识八—Android广播机制

    一.广播机制简介 Android提供了一套完整的API,允许应用程序自由的发送和接受广播,发送广播借助于我们之前学过的:Intent,而接收广播需要借助于广播接收器(Broadcast Receive ...

  2. MySQL(十二)游标和触发器

    一.游标 定义:存储在MySQL服务器上的数据库查询,是一种被select语句检索出来的结果集. 作用:方便在检索出来的结果集中前进或后退一行或多行. 游标主要用于交互式应用:MySQL中的游标只能用 ...

  3. Oracle存储过程的调试

    在工作汇总有时候程序会调用存储过程来实现某些功能,因为这样的话,速度更快.所以学习如何调试存储过程就非常的重要. 首先,打开PLSQL DEVELOPMENT首先介绍一下,这个软件的各个窗口是用来干什 ...

  4. ionic访问odoo 11接口

    在架设完毕odoo 11的网站之后,第一次面临手机app该如何访问后台网站的问题,是不是模式类似asp.net mvc 那样的模式,或者还存在其他的访问方法,带着这个疑问与困惑,开始的我的研究学习之路 ...

  5. 将 C# 枚举序列化为 JSON 字符串 实践

    一.定义枚举 public enum SiteTypeEnum { 中转部 = 1, 网点 = 2 } 还有 BooleanEnum 和 OptTypeEnum 这两个枚举,这里暂且省略了它们的定义. ...

  6. springboot+thymeleaf刨坑——首页加载js/css等失败解决方法

    在使用thymeleaf加载css或js样式,当我们进入登录页的时候发现,所有的样式都是加载失败的.原因是在新版中有这样一个坑……: 当我们设置了addInterceptors-注册拦截器的时候,通常 ...

  7. nginx域名访问的白名单配置梳理

    在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问.可以通过下面四种方法来达到这种效果:1)针对nginx域名配置所启用的端口(比如80端口)在iptable ...

  8. linux下expect环境安装以及简单脚本测试

    expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下 ...

  9. C_数据结构_链式二叉树

    # include <stdio.h> # include <malloc.h> struct BTNode { int data; struct BTNode * pLchi ...

  10. Lotto HDU

    链接 [http://acm.hdu.edu.cn/showproblem.php?pid=1342] 题意 分析 DFS 代码 #include<cstdio> #include< ...