分数规划的裸题。

不会分数规划的OIer。百度:胡伯涛《最小割模型在信息学竞赛中的应用》

/*
TLE1:
last:add(i,j+n,1e9,(real)((real)a[i][j]-ans*(real)b[i][j]));
now :add(i,j+n,1,(real)((real)a[i][j]-ans*(real)b[i][j]));
TLE2:
last:real l=eps,r=(real)u/(real)v,mid,ans=0,now;
now :real l=0,r=(real)(u+v-1)/(real)v,mid,ans=0,now;
TLE3:
last:struct edge{int v,next;real cost,cap;}e[N<<1];
now :to[N],next[N],cap[N];real cost[N];(结构体跑得慢)
TLE4:
last:typedef long double real;
now :typedef double real;
*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#define set(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);
using namespace std;
const int N=1e5+;
const int Z=;
typedef long double real;
const real eps=1e-;
int n,m,S,T,a[Z][Z],b[Z][Z];
int to[N],next[N],cap[N];real cost[N];int tot=,head[N];
real dis[N];int q[N],pre[N];bool vis[N];
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void add(int x,int y,int z,real Cost){
to[++tot]=y;cap[tot]=z;cost[tot]=Cost;next[tot]=head[x];head[x]=tot;
to[++tot]=x;cap[tot]=;cost[tot]=-Cost;next[tot]=head[y];head[y]=tot;
}
bool spfa(){
memset(vis,,sizeof vis);
for(int i=;i<=T+;i++) dis[i]=-1e9;
unsigned short h=,t=;q[t]=S;dis[S]=;
while(h!=t){
int x=q[++h];vis[x]=;
for(int i=head[x];i;i=next[i]){
if(cap[i]>&&dis[to[i]]<dis[x]+cost[i]){
dis[to[i]]=dis[x]+cost[i];
pre[to[i]]=i;
if(!vis[to[i]]){
vis[to[i]]=;
q[++t]=to[i];
}
}
}
}
return dis[T]>-1e9;
}
real augment(){
// int flow=1e9;
// for(int i=T;i!=S;i=to[pre[i]^1]) flow=min(flow,cap[pre[i]]);
int flow=;
for(int i=T;i!=S;i=to[pre[i]^]){
cap[pre[i]]-=flow;
cap[pre[i]^]+=flow;
}
return dis[T]*flow;
}
real mapping(real ans){
tot=;S=;T=n<<|;
memset(head,,sizeof head);
for(int i=;i<=n;i++) add(S,i,,),add(i+n,T,,);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
add(i,j+n,,(real)((real)a[i][j]-ans*(real)b[i][j]));
}
}
real res=0.0;
while(spfa()) res+=augment();
return res;
}
int cmp(real x){
if(fabs(x)<eps) return ;
return x>?:-;
}
void work1(){
tot=;S=;T=n<<|;
memset(head,,sizeof head);
for(int i=;i<=n;i++) add(S,i,,),add(i+n,T,,);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
add(i,j+n,,(real)a[i][j]);
}
}
real res=0.0;
while(spfa()) res+=augment();
res/=1.0*n;
printf("%.6lf\n",(double)res);
}
int main(){
set(ball);
n=read();
int u=,v=;
for(int i=,t;i<=n;i++){
t=;
for(int j=;j<=n;j++){
a[i][j]=read();
t=max(t,a[i][j]);
}
u+=t;
}
bool f=;
for(int i=,t;i<=n;i++){
t=1e9;
for(int j=;j<=n;j++){
b[i][j]=read();
t=min(t,b[i][j]);
if(b[i][j]!=) f=;
}
v+=t;
}
if(f){work1();return ;}
real l=,r=(real)(u+v-)/(real)v,mid,ans=,now;
while(l+eps<r){
mid=(l+r)/2.0;
now=mapping(mid);
if(cmp(now)==){printf("%.6lf\n",(double)mid);return ;}
if(cmp(now)>) l=mid;
else r=mid;
}
printf("%.6lf\n",(double)l);
fclose(stdin);
fclose(stdout);
return ;
}

codevs 5965 [SDOI2017]新生舞会的更多相关文章

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

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

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

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

  3. 洛谷 P3705 [SDOI2017]新生舞会 解题报告

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

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

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

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

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

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

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

  7. 【算法】01分数规划 --- HNOI2009最小圈 & APIO2017商旅 & SDOI2017新生舞会

    01分数规划:通常的问法是:在一张有 \(n\) 个点,\(m\) 条边的有向图中,每一条边均有其价值 \(v\) 与其代价 \(w\):求在图中的一个环使得这个环上所有的路径的权值和与代价和的比率最 ...

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

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

  9. 题解:SDOI2017 新生舞会

    题解:SDOI2017 新生舞会 Description 学校组织了一次新生舞会,Cathy 作为经验丰富的老学姐,负责为同学们安排舞伴. 有 \(n\) 个男生和 \(n\) 个女生参加舞会.一个男 ...

随机推荐

  1. AutoFac文档5(转载)

    目录 开始 Registering components 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 扫描 autofac可 ...

  2. hibernate 中HQL查询

    由于比较简单,在此处只写一些HQL语言. 表关系,多对一. CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `uname` varchar( ...

  3. centos x64 vsftpd 530登陆错误问题

    近来在centos 6.0 x64版本下安装vsftpd,中间出现一些问题,解决过程总结如下: 安装vsftpd:yum install vsftpd 安装后配置为虚拟用户登陆,然后用:ftp loc ...

  4. Atitit.软件GUI按钮与仪表盘(01)--报警系统--

    Atitit.软件GUI按钮与仪表盘(01)--报警系统-- 1. 温度报警区(鲁大师,360taskman) 1 2. os-区-----cpu_mem_io资源占用监测 1 3. Vm区 1 4. ...

  5. redis基础之安装和配置(一)

    前言 折腾一下redis在linux环境的安装. ubantu16.04环境下安装 下载安装,依次执行命令; # 从官方网站下载安装包,注意,当前在哪个目录下执行命令,下载的包将在哪个目录下 $ wg ...

  6. iOS应用代码段瘦身办法

    iOS应用代码段瘦身办法 大型app应对苹果官方代码段大小限制的小伎俩… 背景 苹果官方文档 对二进制 __TEXT 段大小有限制: 代码实在瘦不下去怎么办? 解决方案 利用 rename_secti ...

  7. 【转】搞清楚LzoCodec和LzopCodec

    使用LZO过程会发现它有两种压缩编码可以使用,即LzoCodec和LzopCodec,下面说说它们区别: LzoCodec比LzopCodec更快, LzopCodec为了兼容LZOP程序添加了如 b ...

  8. oracle 数据库中,应用程序里的连接探測语句的正确使用

    oracle 数据库中,应用程序里的连接探測语句的正确使用 本文为原创文章.转载请注明出处:http://blog.csdn.net/msdnchina/article/details/3851376 ...

  9. jquery checkbox选中

    楼主写的在1.6之前是没有问题的,jquery 1.6后就要这样写了,<input type='checkbox' id='cb'/> <script> //获取是否选中 va ...

  10. Redis 响应延迟问题排查

    计算延迟时间 如果你正在经历响应延迟问题,你或许能够根据应用程序的具体情况算出它的延迟响应时间,或者你的延迟问题非常明显,宏观看来,一目了然.不管怎样吧,用redis-cli可以算出一台Redis 服 ...