codevs 5965 [SDOI2017]新生舞会
分数规划的裸题。
不会分数规划的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]新生舞会的更多相关文章
- [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
[Sdoi2017]新生舞会 题意:沙茶01分数规划 貌似\(*10^7\)变成整数更科学 #include <iostream> #include <cstdio> #inc ...
- BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流
BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...
- 洛谷 P3705 [SDOI2017]新生舞会 解题报告
P3705 [SDOI2017]新生舞会 题目描述 学校组织了一次新生舞会,\(Cathy\)作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个 ...
- 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 601 Solved: 313 Description 学校 ...
- 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流
[BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...
- [BZOJ4819][SDOI2017]新生舞会(分数规划+费用流,KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1097 Solved: 566[Submit][Statu ...
- 【算法】01分数规划 --- HNOI2009最小圈 & APIO2017商旅 & SDOI2017新生舞会
01分数规划:通常的问法是:在一张有 \(n\) 个点,\(m\) 条边的有向图中,每一条边均有其价值 \(v\) 与其代价 \(w\):求在图中的一个环使得这个环上所有的路径的权值和与代价和的比率最 ...
- 4819: [Sdoi2017]新生舞会(分数规划)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1031 Solved: 530[Submit][Statu ...
- 题解:SDOI2017 新生舞会
题解:SDOI2017 新生舞会 Description 学校组织了一次新生舞会,Cathy 作为经验丰富的老学姐,负责为同学们安排舞伴. 有 \(n\) 个男生和 \(n\) 个女生参加舞会.一个男 ...
随机推荐
- C#:转换类型(待补充)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyCo ...
- Android_08手机联系人编码中SimpleAdapter的使用说明
1. SimpleAdapter adapter = new SimpleAdapter(this, list1,R.layout.my_layout, new String[] { "n ...
- Mysql 日期时间类型详解
MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型. 这些数据类型的主要区别如下: * 如果要用来表示年月日 ...
- 分布式ID生成方案
系统唯一ID是设计一个系统的时候常常会遇到的问题,也常常为这个问题而纠结. 生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略. 0. 分布式ID要求 ...
- location 禁止以/data开头的文件
[root@web01 default]# tree data/ data/ └── index.html directories, file [root@web01 default]# cat da ...
- svn add xxx.txt 提示A (bin) xxx.txt
[root@NGINX-APACHE-SVN iptables]# svn ci -m "add iptables.txt" Adding (bin) iptables/iptab ...
- jinja2问题集锦
用jinja2写模板的时候遇到了一些问题,记录一下 抽出base.html作为模板 之前的小项目写得都很不规范,模板都是能用就行,基本上只用到if语句,for语句和变量.导航栏都是复制粘贴,没有把共同 ...
- 【转】python3+Django+MySQL+pymysql
使用python3和Django搭建自己的服务器的时候使用的是sqlite数据库,一切顺利. 可是等到布置生产环境的时候要换成MySQL,根据Django官网的文档也设置好了setting.DATAB ...
- poj2774(后缀数组水题)
http://poj.org/problem?id=2774 题意:给你两串字符,要你找出在这两串字符中都出现过的最长子串......... 思路:先用个分隔符将两个字符串连接起来,再用后缀数组求出h ...
- python学习笔记(7)--爬虫隐藏代理
说明: 1. 好像是这个网站的代理http://www.xicidaili.com/ 2. 第2,3行的模块不用导入,之前的忘删了.. 3. http://www.whatismyip.com.tw/ ...