比值最大 分数规划

二分答案之后用费用流进行验证。

据说标称强行乘以1e7换成了整数的二分。

不过貌似实数二分也可以过。

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair
#define eps 1e-7
#define inf 1e9
#define maxn 50005 int h[maxn],to[maxn],ne[maxn],en=0,fl[maxn],n,S=maxn-2,T=maxn-1;
double cost[maxn],a[101][101],b[101][101],dis[maxn];
int with[maxn],minn[maxn],inq[maxn]; void add(int a,int b,double c,int d)
{
to[en]=b;ne[en]=h[a];fl[en]=d;cost[en]=c; h[a]=en++;
to[en]=a;ne[en]=h[b];fl[en]=0;cost[en]=-c;h[b]=en++;
} queue <int> q; bool SPFA()
{
F(i,1,2*n) dis[i]=inf; dis[S]=inf; dis[T]=inf;
memset(inq,0,sizeof inq);
memset(with,0,sizeof with);
memset(minn,0x3f,sizeof minn);
q.push(S); inq[S]=1; dis[S]=0;
while (!q.empty())
{
int x=q.front(); q.pop(); inq[x]=0;
for (int i=h[x];i>=0;i=ne[i])
if (dis[to[i]]>dis[x]+cost[i]&&fl[i]>0)
{
dis[to[i]]=dis[x]+cost[i];
minn[to[i]]=min(minn[x],fl[i]);
with[to[i]]=i;
if (!inq[to[i]]) q.push(to[i]),inq[to[i]]=1;
}
}
return dis[T]<inf-eps;
} double zeng()
{
for (int i=T;i!=S;i=to[with[i]^1])
{
fl[with[i]]-=minn[T];
fl[with[i]^1]+=minn[T];
}
return minn[T]*dis[T];
} double dinic()
{
double ret=0,tmp;
while (SPFA())
{
tmp=zeng();
ret+=tmp;
}
return ret;
} bool check(double d)
{
memset(h,-1,sizeof h);
en=0;
F(i,1,n) add(S,i,0,1);
F(i,1,n) add(i+n,T,0,1);
F(i,1,n) F(j,1,n) add(i,j+n,d*b[i][j]-a[i][j],1);
double ret=dinic();
if (ret<0) return true;
return false;
} int main()
{
scanf("%d",&n);
F(i,1,n) F(j,1,n) scanf("%lf",&a[i][j]);
F(i,1,n) F(j,1,n) scanf("%lf",&b[i][j]);
double l=0,r=1e4;
while (fabs(l-r)>eps)
{
double mid=(l+r)/2;
if (check(mid)) l=mid;
else r=mid;
}
printf("%.6lf\n",(l+r)/2);
}

  

BZOJ 4819 [Sdoi2017]新生舞会 ——费用流 01分数规划的更多相关文章

  1. BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)

    BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19. ...

  2. bzoj 4819: [Sdoi2017]新生舞会【二分+最小费用最大流】

    如果\( b[i]==0 \)那么就是裸的费用流/KM,当然KM快一些但是为什么不写KM呢因为我不会打板子了 考虑二分答案,那么问题变成了判定问题. \[ ans=\frac {a_1+a_2+... ...

  3. bzoj 4819: [Sdoi2017]新生舞会

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...

  4. 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)

    4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 601  Solved: 313 Description 学校 ...

  5. 4819: [Sdoi2017]新生舞会(分数规划)

    4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1031  Solved: 530[Submit][Statu ...

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

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

  7. 【BZOJ4819】【SDOI2017】新生舞会 [费用流][分数规划]

    新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 学校组织了一次新生舞会,Cathy ...

  8. 4819: [Sdoi2017]新生舞会 分数规划

    题目 https://www.lydsy.com/JudgeOnline/problem.php?id=4819 思路 分数规划的模板题?(好菜呀) 假如n=3吧(懒得写很长的式子) \(c=\fra ...

  9. BZOJ 2402 陶陶的难题II (01分数规划+树剖+线段树+凸包+二分)

    题目大意:略 一定范围内求最大值,考虑二分答案 设现在选择的答案是$mid$,$max \left \{ \frac{yi+qj}{xi+pj} \right \} \geq mid $ 展开可得,$ ...

随机推荐

  1. VS2013常用快捷键[转] 注释 Ctrl+K - C 和 k - u

    VS2013常用快捷键你敢不会?   F1 帮助文档 F5 运行 F12 跳转到定义 F11 单步调试 Shift+F5 停止调试 Ctrl+滚轮 放大缩小当前视图 Ctrl+L 删除当前行 Ctrl ...

  2. python之道13

    看代码分析结果 func_list = [] for i in range(10): func_list.append(lambda :i) v1 = func_list[0]() v2 = func ...

  3. pandas交叉表和透视表及案例分析

    一.交叉表: 作用: 交叉表是一种用于计算分组频率的特殊透视图,对数据进行汇总 考察预测数据和正式数据的对比情况,一个作为行,一个作为列 案例: 医院预测病人病情: 真实病情如下数组(B:有病,M:没 ...

  4. Ubuntu 下安装mysqlclient报错

    pip3 install mysqlclient 报错信息 问题描述: Complete output from command python setup.py egg_info: /bin/sh: ...

  5. DeepFaceLab小白入门(1):软件简介!

    简介 DeepFaceLab是一种利用深度学习识别和交换图片和视频中的人脸的工具 这是一个github上的开源项目,所有人都可以查看源代码也能免费使用.个人认为这个项目的最大优点就是安装超级简单,几乎 ...

  6. 【mysql】mysql 备份脚本

    #! /bin/bash   HOST=localhost USER=root PASSWORD=password DATE_STR=$(date '+%F--%T') ERROR_LOG=/usr/ ...

  7. Jsoup -- 网络爬虫解析器

    需要下载jsoup-1.8.1.jar包 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQue ...

  8. Python 中的for,if-else和while语句

    for 循环 功能 for 循环是一种迭代循环机制,迭代即重复相同的逻辑操作,每次的操作都是基于上一次的结果而进行的.并且for循环可以遍历任何序列的项目,如一个列表或者一个字符串 语法 for 循环 ...

  9. Python头脑风暴2

    今天想到了一个致富新途径:假如我在X东上班,我写个X宝爬虫,专门爬在X宝买奢侈品的土豪,然后我自己注册个X宝号,用脚本一个个加他们然后给他们发信息说我X东这还有比你更便宜更好的...不知道行不行啊(狗 ...

  10. poj-3009 curling2.0(搜索)

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26408   Accepted: 10546 Des ...