题目链接

  本来以为自己可以做出来,结果……打脸了

  (貌似来wc立了好几个flag了,都没竖起来)

  不过乱蒙能蒙出一个叫“分数规划”的东西的式子还是很开心的

  观察$C=\frac{a_{1}+a_{2}+.......+a_{n}}{b_{1}+b_{2}+.....b_{n}}$

  然后可以把分母乘到左边

  然后可以把C乘进去

  然后二分C,建图求最大权匹配,判断跟答案的关系。

  

#include<cstdio>
#include<cstdlib>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#define maxn 450
#define eps 1e-7
using namespace std; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct Edge{
int from,next,to,val;
double dis;
}edge[maxn*maxn*];
int head[maxn],num;
inline void addedge(int from,int to,int val,double dis){
edge[++num]=(Edge){from,head[from],to,val,dis};
head[from]=num;
}
inline void add(int from,int to,int val,double dis){
addedge(from,to,val,dis);
addedge(to,from,,-dis);
}
inline void clear(){ memset(head,,sizeof(head)); num=; }
inline int count(int i){ return i&?i+:i-; } double dis[maxn];
int pre[maxn];
int flow[maxn];
bool vis[maxn];
int d[maxn][maxn];
int w[maxn][maxn];
int Start,End;
int n; double spfa(){
for(int i=Start;i<=End;++i) dis[i]=-0x7fffffff; dis[Start]=;
queue<int>q; q.push(Start); memset(flow,,sizeof(flow)); flow[Start]=0x7fffffff;
while(!q.empty()){
int from=q.front(); q.pop(); vis[from]=;
for(int i=head[from];i;i=edge[i].next){
int to=edge[i].to;
if(edge[i].val<=||dis[to]>=dis[from]+edge[i].dis) continue;
dis[to]=dis[from]+edge[i].dis;
pre[to]=i; flow[to]=min(flow[from],edge[i].val);
if(vis[to]) continue;
vis[to]=; q.push(to);
}
}
if(flow[End]==) return ;
int now=End;
while(now!=Start){
//printf("D");
int i=pre[now];
edge[i].val-=flow[End];
edge[count(i)].val+=flow[End];
now=edge[i].from;
}
return dis[End];
} bool payflow(double lim){
clear();
for(int i=;i<=n;++i){
add(Start,i,,);
add(i+n,End,,);
}
for(int i=;i<=n;++i)
for(int j=;j<=n;++j) add(i,j+n,,1.0*d[i][j]-1.0*w[i][j]*lim);
double ret=;
while(){
double now=spfa();
if(fabs(now)<=eps) break;
ret+=now;
}
return ret>;
} int main(){
n=read(); End=n*+;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j) d[i][j]=read();
for(int i=;i<=n;++i)
for(int j=;j<=n;++j) w[i][j]=read();
double l=,r=1e4;double ans=;
while(r-l>eps){
double mid=(l+r)/2.0;
if(payflow(mid)){
ans=mid;
l=mid;
}
else r=mid;
}
printf("%.6lf",ans);
return ;
}

【Luogu】P3705新生舞会(费用流+分数规划+二分答案)的更多相关文章

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

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

  2. BZOJ 4819 [Sdoi2017]新生舞会 ——费用流 01分数规划

    比值最大 分数规划 二分答案之后用费用流进行验证. 据说标称强行乘以1e7换成了整数的二分. 不过貌似实数二分也可以过. #include <map> #include <cmath ...

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

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

  4. 【BZOJ4819】 新生舞会(01分数规划,费用流)

    Solution 考虑一下这个东西的模型转换: \(\frac{\sum_{i=1}^n{a_i}}{\sum_{i=1}^n{b_i}}\) 然后转换一下发现显然是01分数规划. \(\sum_{i ...

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

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

  6. LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配

    #2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  7. [SDOI2017]新生舞会 0/1分数规划

    ---题面--- 题解: 0/1分数规划,,,但是竟然有诡异的精度问题???因为这个被卡了好久 中途还写过一次KM,,,结果陷入死循环,,,我大概是写了一个假KM,,,于是放弃KM,回来调费用流 这个 ...

  8. [SDOI2017] 新生舞会 - 二分图最大权匹配,分数规划,二分答案

    有一个二分图,每个部都有 \(n\) 个点,每条边有两个参数 \(a_e, b_e\),求一种匹配,使得 \(\sum a_i / \sum b_i\) 最大 Solution 显然的分数规划,考虑二 ...

  9. [BJOI2019]奥术神杖——AC自动机+DP+分数规划+二分答案

    题目链接: [BJOI2019]奥术神杖 答案是$ans=\sqrt[c]{\prod_{i=1}^{c}v_{i}}=(\prod_{i=1}^{c}v_{i})^{\frac{1}{c}}$. 这 ...

随机推荐

  1. “IIS7.5无法写入配置文件web.config”的解决方案

    原因 用了非NTSF(如:FAT32或exFAT分区格式,导致无法设置安全选项,从而导致无法自动写入文件). 解决方案 先在默认网站配置好,然后把web.config复制到目标网站的根目录,这样就等于 ...

  2. Java异常之RuntimeException

    人生不如意十有八九.在打Core Java里面的例子的时候总是一遍就过,但是实际上只要是自己想着动手去打造自己想要的东西,异常的状况也是十有八九的. 在Java中会使用异常处理的错误捕获机制处理这些异 ...

  3. 修改deeplabv3的test的输出的label颜色

    deeplab.py是拿来做test的,其中的postprecess函数中的palette = pascal_palette_invert()是给每个类别加颜色 这个是通过import utils获得 ...

  4. polygon 画图

    cityscape数据集,我现在想根据json文件中的polygon画出整个road的区域,这是运行的脚本.这个文件必须使用coco的pythonAPI的包,把这个脚本放在pythonAPI文件夹下就 ...

  5. comboBox 下拉宽度自适应

    ///适用combobox绑定datatable private void comboBox_DataSourceChanged(object sender, EventArgs e) { Combo ...

  6. 201621123080 《Java程序设计》第2周学习总结

    Week02-Java基本语法与类库 1. 本周学习总结 本周主要学习了java的数据类型.运算符,String类,java的简单输入输出与流程控制. 在做题上对String和数组的理解与区分仍不够深 ...

  7. 如何用纯 CSS 创作一根闪电连接线

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RBjdzZ 可交互视频 ...

  8. GoF23种设计模式之结构型模式之代理模式

    一.概述 为其他对象提供一种代理以控制对这个对象的访问. 二.适用性 1.远程代理(RemoteProxy):为一个对象在不同的地址空间土工局部代表. 2.虚代理(VirtualProxy):根据需要 ...

  9. ubuntu更新内核后卡在自检无法开机的解决方法

    下载deb包安装,重启后卡在自检,黑屏. 重启进旧内核,仍然卡在自检,黑屏. 强制关机后再重启,在grub按e修改启动项,改成直接进命令行模式.使用 sudo apt-get remove linux ...

  10. PAT Basic 1081

    1081 检查密码 本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能.该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母.数字和小数点 .,还必须既有字母也有数字. 输 ...