BZOJ 4819 [Sdoi2017]新生舞会 ——费用流 01分数规划
比值最大 分数规划
二分答案之后用费用流进行验证。
据说标称强行乘以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分数规划的更多相关文章
- BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19. ...
- bzoj 4819: [Sdoi2017]新生舞会【二分+最小费用最大流】
如果\( b[i]==0 \)那么就是裸的费用流/KM,当然KM快一些但是为什么不写KM呢因为我不会打板子了 考虑二分答案,那么问题变成了判定问题. \[ ans=\frac {a_1+a_2+... ...
- bzoj 4819: [Sdoi2017]新生舞会
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...
- 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 601 Solved: 313 Description 学校 ...
- 4819: [Sdoi2017]新生舞会(分数规划)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1031 Solved: 530[Submit][Statu ...
- bzoj 3597: [Scoi2014]方伯伯运椰子 [01分数规划 消圈定理 spfa负环]
3597: [Scoi2014]方伯伯运椰子 题意: from mhy12345 给你一个满流网络,对于每一条边,压缩容量1 需要费用ai,扩展容量1 需要bi, 当前容量上限ci,每单位通过该边花费 ...
- 【BZOJ4819】【SDOI2017】新生舞会 [费用流][分数规划]
新生舞会 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 学校组织了一次新生舞会,Cathy ...
- 4819: [Sdoi2017]新生舞会 分数规划
题目 https://www.lydsy.com/JudgeOnline/problem.php?id=4819 思路 分数规划的模板题?(好菜呀) 假如n=3吧(懒得写很长的式子) \(c=\fra ...
- BZOJ 2402 陶陶的难题II (01分数规划+树剖+线段树+凸包+二分)
题目大意:略 一定范围内求最大值,考虑二分答案 设现在选择的答案是$mid$,$max \left \{ \frac{yi+qj}{xi+pj} \right \} \geq mid $ 展开可得,$ ...
随机推荐
- 2018.4.10 Ubuntu cat命令解答、用法
cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的: cat主要有三大功能: 1.一次显示整个文件. $ cat filename 2.从键盘创建一个文件. $ cat > ...
- APP上线碰到的问题:Non-public API usage
①.Non-public API usage:The app references non-public symbols in XXXX: _UICreateCGImageFromIOSurface ...
- Yii2应用的运行过程
每一个框架都有一个入口脚本,Yii2也不例外.一般来说,对于Web应用的入口脚本是YiiBasePath/frontend/web目录下的index.php. 先观察这个文件: <?php de ...
- 转 Keras 保存与加载网络模型
https://blog.csdn.net/qq_28413479/article/details/77367665
- 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线
可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...
- 201621123080 《Java程序设计》 第7周学习总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 事件 事件源 事件监听器 事件处理方法 1.2 任意 ...
- Python学习笔记:os模块和sys模块
os模块 os.path.driname(path):返回当前路径的上一级路径字符串. os.path.basename(path):返回当前路径的目录名(文件夹名)或文件名(全称). os.path ...
- python之绝对导入和相对导入
绝对导入 import sys, os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) sys.path.append(BASE_DIR) ...
- bash数组操作-定义/初始化/赋值…
数组: 连续的多个独立内存空间,每个内存空间相当于一个变量 数组元素:数组名+索引 索引:从0开始编号 声明数组: declar ...
- webdriver高级应用- 启动FireFox的同时打开Firebug
1. 首先本机Firefox浏览器需要安装一下firebug插件,具体怎么安装这里不赘述,网上教程很多. 2. 具体自动化实现的代码如下: #encoding=utf-8 from selenium ...