题解:二分答案mid,然后将每个位置看成a-b*mid,然后由于是n个男生和n个女生匹配,每个人搭配一个cp,于是有点类似于https://www.lydsy.com/JudgeOnline/problem.php?id=1070(费用流模板题),加边(S,i,1,0),(i+n,T,1,0),(i,j+n,1,a[i][j]-mid*b[i][j])(注:括号内分别为始边、终边、流量、费用),跑最大费用最大流,若大于0则调整下界,否则调整上界,直至上下界基本重合。

#include<bits/stdc++.h>
using namespace std;
const int N=;
struct edge{int u,v,w,nxt;double c;}e[N*N*];
queue<int>q;
int n,S,T,ecnt,hd[N],vis[N],pre[N];
double a[N][N],b[N][N],d[N];
void adde(int x,int y,int z,double c)
{
e[++ecnt]=(edge){x,y,z,hd[x],c},hd[x]=ecnt;
e[++ecnt]=(edge){y,x,,hd[y],-c},hd[y]=ecnt;
}
bool spfa()
{
for(int i=S;i<=T;i++)d[i]=-1e18,pre[i]=;
d[S]=,q.push(S);
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=;
for(int i=hd[u];i;i=e[i].nxt)
if(e[i].w&&d[u]+e[i].c>d[e[i].v])
{
pre[e[i].v]=i,d[e[i].v]=d[u]+e[i].c;
if(!vis[e[i].v])q.push(e[i].v),vis[e[i].v]=;
}
}
return d[T]>-1e18;
}
bool check()
{
double ret=;
while(spfa())
{
int mn=1e9+;
for(int i=pre[T];i;i=pre[e[i^].v])mn=min(mn,e[i].w);
for(int i=pre[T];i;i=pre[e[i^].v])e[i].w-=mn,e[i^].w+=mn;
ret+=mn*d[T];
}
return ret>;
}
int main()
{
scanf("%d",&n),T=*n+;
for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%lf",&a[i][j]);
for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%lf",&b[i][j]);
double l=,r=,mid;
while(r-l>1e-)
{
mid=(l+r)/;
ecnt=;
memset(hd,,sizeof hd);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
adde(i,j+n,,a[i][j]-mid*b[i][j]);
for(int i=;i<=n;i++)adde(S,i,,),adde(i+n,T,,);
if(check())l=mid;else r=mid;
}
printf("%.6lf",l);
}

[Sdoi2017]新生舞会(分数规划+费用流)的更多相关文章

  1. 【bzoj4819】[Sdoi2017]新生舞会 分数规划+费用流

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

  2. [BZOJ4819][SDOI2017]新生舞会(分数规划+费用流,KM)

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

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

    #include <algorithm> #include <iterator> #include <iostream> #include <cstring& ...

  4. bzoj4819 [Sdoi2017]新生舞会 分数规划+最大费用最大流

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4819 题解 首先上面说, \[ C = \frac{\sum\limits_{i=1}^n a ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 微信H5页面 会被软键盘顶起来

    问题描述:H5页面在微信中打开,input输入框获取焦点时,页面被软键盘顶上去:关闭软键盘时,页面不会自动下来(恢复初始状态) H5页面在微信中初始状态如下图: input输入框获取焦点时,页面被软键 ...

  2. vue鼠标悬停事件

    v-bind:title="message" <!DOCTYPE html> <html lang="en"> <head> ...

  3. element-tree-grid(表格树)的使用

    表格树,element-tree-grid需要单独下载并再配合elementUi里el-table使用. 步骤:1.npm install element-tree-grid --save(下载ele ...

  4. Django 使用 locals() 函数

    locals() 函数会以字典类型返回当前位置的全部局部变量. 在 views.py 中添加 from django.shortcuts import render,HttpResponse,rend ...

  5. vue中使用百度地图,悬浮窗搜索功能

    https://www.cnblogs.com/shuaifing/p/8185311.html 侵删 <template> <div id="all"> ...

  6. 获取元素CSS样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 巧用Handler获取View控件信息

    众所周知,在Android实际开发中,对于某些复杂多变的情况,控件的位置摆放.大小控制并非是xml类型的layout文件完全可以搞定的.此时,我们通常会使用Java代码来通过动态计算,将指定的控件摆放 ...

  8. 使用PDF.JS实现pdf文件在线预览时,报文件被损坏的错误

    首先大概说明一下问题出现的背景:我用PDF.JS实现文件在线预览,参考网上的办法,在jsp文件中使用 <iframe src="<c:url value="js/gen ...

  9. 如何正确的升级node版本【已解决】

    博主亲身经历可以用以下几步解决node版本问题噢,解决了记得留个赞哈! 1 . 首先要安装n这个版本控制器噢 npm i -g n 如果这一步成功了就接着走哈,但是博主试了,大多数是安装不成功的,可以 ...

  10. JAVA 四舍五入Math.round方法

    今天由于测试场景,利息的计算中涉及小数点的保留.保留的规则是:两位小数+四舍五入方式 使用的语言是JAVA, 看了许多网上的方法.因为最后保留的小数还会进行计算.所以我考虑最好不要保留的结果是Stri ...