【BZOJ4819】 新生舞会(01分数规划,费用流)
Solution
考虑一下这个东西的模型转换:
\(\frac{\sum_{i=1}^n{a_i}}{\sum_{i=1}^n{b_i}}\)
然后转换一下发现显然是01分数规划。
\(\sum_{i=1}^n{b_i}*mid\leq \sum_{i=1}^n{a_i}\)
然后再移项:
\(0 \leq \sum_{i=1}^n{a_i-b_i*mid}\)
然后就是求一个最大费用最大流判断是不是>0就好了。
口胡简单,实现靠自己
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
int f=1,sum=0;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
return f*sum;
}
const int N=210;
const double eps=1e-10,Inf=1e18;
int front[N],to[(N*N)<<2],nxt[(N*N)<<2],w[(N*N)<<2],s=0,t,cnt,vis[N<<2],fa[N<<2],pre[N<<2],n,a[N][N],b[N][N];
double c[(N*N)<<2],dis[N<<2];
void Add(int u,int v,int val,double f){
to[cnt]=v;nxt[cnt]=front[u];front[u]=cnt;w[cnt]=val;c[cnt++]=f;
to[cnt]=u;nxt[cnt]=front[v];front[v]=cnt;w[cnt]=0;c[cnt++]=-f;
}
queue<int>Q;
bool SPFA(){
for(int i=s;i<=t+1;i++)dis[i]=-Inf;
dis[s]=0;
Q.push(s);
while(!Q.empty()){
int u=Q.front();Q.pop();vis[u]=0;
for(int i=front[u];i!=-1;i=nxt[i]){
int v=to[i];
if(w[i] && dis[v]<dis[u]+c[i]){
dis[v]=dis[u]+c[i];fa[v]=u;pre[v]=i;
if(!vis[v]){
vis[v]=1;Q.push(v);
}
}
}
}
return dis[t]!=dis[t+1];
}
double McMf(){
double ans=0;
while(SPFA()){
ans+=dis[t];
for(int i=t;i!=s;i=fa[i]){
w[pre[i]]--;w[pre[i]^1]++;
}
}
return ans;
}
bool check(double mid){
memset(front,-1,sizeof(front));cnt=0;
for(int i=1;i<=n;i++){
Add(s,i,1,0);Add(i+n,t,1,0);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
Add(i,j+n,1,(double)a[i][j]-b[i][j]*mid);
if(McMf()>=0)return true;
return false;
}
int main()
{
n=gi();t=n+n+1;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=gi();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b[i][j]=gi();
double l=0,r=10000;
while(r-l>eps){
double mid=l+(r-l)*0.5;
if(check(mid))l=mid;
else r=mid;
}
printf("%.6lf\n",l);
return 0;
}
【BZOJ4819】 新生舞会(01分数规划,费用流)的更多相关文章
- BZOJ-4819: 新生舞会(01分数规划+费用流)
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...
- 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流
[BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...
- P3705 [SDOI2017]新生舞会 01分数规划+费用流
$ \color{#0066ff}{ 题目描述 }$ 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个女生一 ...
- BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19. ...
- BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流
BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...
- [Sdoi2017]新生舞会(分数规划+费用流)
题解:二分答案mid,然后将每个位置看成a-b*mid,然后由于是n个男生和n个女生匹配,每个人搭配一个cp,于是有点类似于https://www.lydsy.com/JudgeOnline/prob ...
- BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】
题目 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个人 ...
- [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
[Sdoi2017]新生舞会 题意:沙茶01分数规划 貌似\(*10^7\)变成整数更科学 #include <iostream> #include <cstdio> #inc ...
- BZOJ4819: [Sdoi2017]新生舞会(01分数规划)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1029 Solved: 528[Submit][Status][Discuss] Descripti ...
随机推荐
- nginx自旋锁
#include <stdio.h> #include <stdint.h> #include <unistd.h> /* typedef unsigned lon ...
- IOS初级:story board的跳转
本文要实现view1跳到view2,view2又跳回view1. 首先要在视图中拉出一条连接view1和view2的线. 下面是在view1的控制器中实现,从view1跳到view2 //发生跳转前会 ...
- Office 365 API Tools预览版已提供下载
Office 365 API Tools预览版地址:http://visualstudiogallery.msdn.microsoft.com/7e947621-ef93-4de7-93d3-d796 ...
- keybd_event使用方法
Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作.Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM ...
- kbmmw 中的日期时间操作
为了精确度反映时间及时区,kbmmw 里面专门有一个单元处理日期时间,由于很多同学习惯了delphi 自带的Tdatetime,使用这个时会有一些疑惑,因此今天就单独说一下这个. 首先kbmmwdat ...
- Sencha extjs 的安装
delphi 的母公司Idera 突然就把sencha extjs 收购了,这确实是一个很好的消息,意味着delphi 开始在web方面开始发力, 目前delphi 集成extjs 的呼声越来越强烈, ...
- Eclipse创建Dynamic Web部署
Eclipse创建Dynamic Web部署 http://blog.csdn.net/sweblish/article/details/6686046 Eclipse3.x中热部署项目,启动错误问题 ...
- 牛客训练四:Applese 走方格(细节)
题目链接:传送门 思路:主要是n=1,m=2或者n=2,m=1时,不是-1. #include<iostream> #include<cstdio> #include<c ...
- Java 学习之集合类(Collections)
Collection(集合类) 我们是使用数组来保存数据,但是他的长度一旦创建,就已经确定了,当我们要动态传入穿值,数组就有些局限了,集合类就孕育而生:所谓集合,就是来保存,盛装数据,也可称为容器类: ...
- telegraph.conf配置
原文:http://www.cnblogs.com/smail-bao/p/7002361.html 1.操作系统基础监控指标配置标准 基础监控使用通用的全局配置文件telegraf.conf,以下只 ...