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#:Ini文件操作(待补充)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- POJ 3279 Fliptile (二进制+搜索)
[题目链接]click here~~ [题目大意]: 农夫约翰知道聪明的牛产奶多. 于是为了提高牛的智商他准备了例如以下游戏. 有一个M×N 的格子,每一个格子能够翻转正反面,它们一面是黑色,还有一面 ...
- substr.js 字符串切割
substr.js 字符串切割 GitHub 以一个中文字的宽度为一个单位进行字符串切割 substr('南拳的妈妈1992', 4) // => 南拳的妈... substr('imliane ...
- python 多线程 示例
import threading import Queue q = Queue.Queue() from test import * def worker1(x, y): #假设耗时 执行完毕 大于三 ...
- redis五种基本数据类型
1.string类:一个key对应一个value(key:value).string类是二进制安全,可以包含任何数据(例如:图片.音乐). 2.hash类:string类型field和value的映射 ...
- union共用体的对齐
union DATE { char a; ]; double b; }; DATE max; cout<< sizeof(max) << endl; 这个问题很好回答,并且我把 ...
- Google 商店:您的应用静态链接到的 OpenSSL 版本有多个安全漏洞。建议您尽快更新 OpenSSL
安全提醒 您的应用静态链接到的 OpenSSL 版本有多个安全漏洞.建议您尽快更新 OpenSSL. 在开头为 1.0.1h.1.0.0m和 0.9.8za的 OpenSSL 版本中这些漏洞已得到修复 ...
- 源码分析HotSpot GC过程(二):DefNewGeneration的GC过程
由于虚拟机的分代实现,虚拟机不会考虑各个内存代如何实现垃圾回收,具体的工作(对象内存的分配也是一样)由各内存代根据垃圾回收策略自行实现. DefNewGeneration的使用复制算法进行回收.复制算 ...
- SCWS 中文分词
SCWS 中文分词v1.2.3 开源免费的中文分词系统,PHP分词的上乘之选! 首页 下载 演示 文档 关于 服务&支持 API/HTTP 论坛 捐赠 源码@github 文档目录 SCWS- ...
- linux下挂载win7的共享文件夹
由于跨平台开发的需要,需要在Linux和windows之间共享文件夹,所以找了一下方法,我试验了两种都可以使用. 首先声明一下我使用的是VMware10.CentOS6.2 一.手动操作 1.按照下图 ...
