Solution

考虑一下这个东西的模型转换:

\(\frac{\sum_{i=1}^n{a_i}}{\sum_{i=1}^n{b_i}}\)

然后转换一下发现显然是01分数规划。

\(\sum_{i=1}^n{b_i}*mid\leq \sum_{i=1}^n{a_i}\)

然后再移项:

\(0 \leq \sum_{i=1}^n{a_i-b_i*mid}\)

然后就是求一个最大费用最大流判断是不是>0就好了。

口胡简单,实现靠自己

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
    int f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
const int N=210;
const double eps=1e-10,Inf=1e18;
int front[N],to[(N*N)<<2],nxt[(N*N)<<2],w[(N*N)<<2],s=0,t,cnt,vis[N<<2],fa[N<<2],pre[N<<2],n,a[N][N],b[N][N];
double c[(N*N)<<2],dis[N<<2];
void Add(int u,int v,int val,double f){
    to[cnt]=v;nxt[cnt]=front[u];front[u]=cnt;w[cnt]=val;c[cnt++]=f;
    to[cnt]=u;nxt[cnt]=front[v];front[v]=cnt;w[cnt]=0;c[cnt++]=-f;
}
queue<int>Q;
bool SPFA(){
    for(int i=s;i<=t+1;i++)dis[i]=-Inf;
    dis[s]=0;
    Q.push(s);
    while(!Q.empty()){
        int u=Q.front();Q.pop();vis[u]=0;
        for(int i=front[u];i!=-1;i=nxt[i]){
            int v=to[i];
            if(w[i] && dis[v]<dis[u]+c[i]){
                dis[v]=dis[u]+c[i];fa[v]=u;pre[v]=i;
                if(!vis[v]){
                    vis[v]=1;Q.push(v);
                }
            }
        }
    }
    return dis[t]!=dis[t+1];
}
double McMf(){
    double ans=0;
    while(SPFA()){
        ans+=dis[t];
        for(int i=t;i!=s;i=fa[i]){
            w[pre[i]]--;w[pre[i]^1]++;
        }
    }
    return ans;
}
bool check(double mid){
    memset(front,-1,sizeof(front));cnt=0;
    for(int i=1;i<=n;i++){
        Add(s,i,1,0);Add(i+n,t,1,0);
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            Add(i,j+n,1,(double)a[i][j]-b[i][j]*mid);
    if(McMf()>=0)return true;
    return false;
}
int main()
{
    n=gi();t=n+n+1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            a[i][j]=gi();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            b[i][j]=gi();
    double l=0,r=10000;
    while(r-l>eps){
        double mid=l+(r-l)*0.5;
        if(check(mid))l=mid;
        else r=mid;
    }
    printf("%.6lf\n",l);
    return 0;
}

【BZOJ4819】 新生舞会(01分数规划,费用流)的更多相关文章

  1. BZOJ-4819: 新生舞会(01分数规划+费用流)

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

  2. 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流

    [BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...

  3. P3705 [SDOI2017]新生舞会 01分数规划+费用流

    $ \color{#0066ff}{ 题目描述 }$ 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个女生一 ...

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

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

  5. BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流

    BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...

  6. [Sdoi2017]新生舞会(分数规划+费用流)

    题解:二分答案mid,然后将每个位置看成a-b*mid,然后由于是n个男生和n个女生匹配,每个人搭配一个cp,于是有点类似于https://www.lydsy.com/JudgeOnline/prob ...

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

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

  8. [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]

    [Sdoi2017]新生舞会 题意:沙茶01分数规划 貌似\(*10^7\)变成整数更科学 #include <iostream> #include <cstdio> #inc ...

  9. BZOJ4819: [Sdoi2017]新生舞会(01分数规划)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1029  Solved: 528[Submit][Status][Discuss] Descripti ...

随机推荐

  1. jQuery加载完成事件 $(function(){ })的全局异常拦截

    通常我们在页面加载完成的时候要写入一些功能脚本,如: $(function(){/*脚本 - 1*/ console.log('start'); }) $(function(){/*脚本 - 2*/ ...

  2. 如何从jks文件中导出公私钥

    1.从JKS转换到PKCS12 #keytool -importkeystore -srckeystore <MY_KEYSTORE.jks> -destkeystore <MY_F ...

  3. SpringBoot中文乱码解决方案

    转载:https://blog.csdn.net/wangshuang1631/article/details/70753801 方法一,修改application.properties文件 增加如下 ...

  4. Windows 8 Stroe Apps 控件

    重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容 ...

  5. 155. Min Stack - Unsolved

    https://leetcode.com/problems/min-stack/#/solutions Design a stack that supports push, pop, top, and ...

  6. C# 单例模式的五种写法

    1.简单实现           C#   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public sealed c ...

  7. Bootstrap之Bootstrap组件

    一 文本居中 col-xx-offset-xx:水平居中 center-block:使用于不涉及float标签的水平居中,也不涉及列的居中,让哪里居中就写到哪里,本质是:margin:0 auto. ...

  8. De Bruijn序列

    最近文章中经常出现及De Bruijin 这个关键字,网上搜索了一下,记录下来. De Bruijn序列 (德布鲁因序列) 问题:能否构造一个长度为2的n次方的二进制环状串,使得二进制环状串中总共2的 ...

  9. [转]ajQuery的deferred对象详解

    来自:http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html 作者:  ...

  10. ajax +jsp+iframe无刷新上传文件[转]

    http://hi.baidu.com/zj360202/blog/item/f23e3711f929c774cb80c475.html ajax jsp 无刷新上传文件 2009-10-26 16: ...