BZOJ4819: [Sdoi2017]新生舞会(01分数规划)
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1029 Solved: 528
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
19 17 16
25 24 23
35 36 31
9 5 6
3 4 2
7 8 9
Sample Output
HINT
Source
// luogu-judger-enable-o2
#include<cstdio>
#include<queue>
#include<cstring>
#include<cstdlib>
#define INF 1e8+10
using namespace std;
const int MAXN=;
const double eps=1e-;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,MAXN,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read()
{
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
struct node
{
int u,v,f,nxt;
double w;
}edge[MAXN*MAXN];
int head[MAXN],num=;
int N,S,T;
int a[][],b[][];
double ans=0.0;
inline void add_edge(int x,int y,int z,double k)
{
edge[num].u=x;
edge[num].v=y;
edge[num].f=z;
edge[num].w=k;
edge[num].nxt=head[x];
head[x]=num++;
}
inline void AddEdge(int x,int y,int z,double k)
{
add_edge(x,y,z,k);
add_edge(y,x,,-k);
}
int arrive[MAXN],vis[MAXN],pre[MAXN];
double dis[MAXN];
bool SPFA()
{
queue<int>q;
q.push(S);
for(register int i=S;i<=T;i++) dis[i]=-1e20,arrive[i]=;
memset(vis,,sizeof(vis));
dis[S]=;vis[S]=;
while(q.size()!=)
{
int p=q.front();q.pop();
vis[p]=;arrive[p]=;
for(int i=head[p];i!=-;i=edge[i].nxt)
{
if(edge[i].f&&dis[edge[i].v]<dis[p]+edge[i].w)
{
dis[edge[i].v]=dis[p]+edge[i].w;
pre[edge[i].v]=i;
if(!vis[edge[i].v])
q.push(edge[i].v),vis[edge[i].v]=;
}
}
}
return arrive[T];
}
int dfs()
{
int mn=INF;
int now=T;
while(pre[now])
{
mn=min(mn,edge[pre[now]].f);
now=edge[pre[now]].u;
}
ans+=mn*dis[T];
now=T;
while(pre[now])
{
edge[pre[now]].f-=mn;
edge[pre[now]^].f+=mn;
now=edge[pre[now]].u;
}
}
bool check(double val)
{
memset(pre,,sizeof(pre));
memset(head,-,sizeof(head));
num=;
for(int i=;i<=N;i++) AddEdge(S,i,,);
for(int i=;i<=N;i++) AddEdge(i+N,T,,);
for(int i=;i<=N;i++) for(int j=;j<=N;j++) AddEdge(i,j+N,,a[i][j]-1.0*val*b[i][j]);
ans=0.0;
while(SPFA())
dfs();
if (ans<=) return ;
else return ;
}
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
//freopen("c.out","w",stdout);
#else
#endif
N=read();
S=,T=N*|;
for(int i=;i<=N;i++)
for(int j=;j<=N;j++)
a[i][j]=read();
for(int i=;i<=N;i++)
for(int j=;j<=N;j++)
b[i][j]=read();
double l=,r=;
while(r-l>=eps)
{
double mid=(l+r)/;
if(check(mid)) r=mid;
else l=mid;
}
printf("%.6lf",l);
return ;
}
BZOJ4819: [Sdoi2017]新生舞会(01分数规划)的更多相关文章
- 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流
[BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...
- [Sdoi2017]新生舞会 [01分数规划 二分图最大权匹配]
[Sdoi2017]新生舞会 题意:沙茶01分数规划 貌似\(*10^7\)变成整数更科学 #include <iostream> #include <cstdio> #inc ...
- 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个女生参加舞 ...
- 【BZOJ4819】新生舞会(分数规划,网络流)
[BZOJ4819]新生舞会(分数规划,网络流) 题面 BZOJ Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买 ...
- BZOJ-4819: 新生舞会(01分数规划+费用流)
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...
- 4819: [Sdoi2017]新生舞会(分数规划)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1031 Solved: 530[Submit][Statu ...
- [Sdoi2017]新生舞会(分数规划+费用流)
题解:二分答案mid,然后将每个位置看成a-b*mid,然后由于是n个男生和n个女生匹配,每个人搭配一个cp,于是有点类似于https://www.lydsy.com/JudgeOnline/prob ...
随机推荐
- aes加密算法的一个问题
百度“delphi aes”出来的结果,千篇一律,都是相互转载,但是没有人发现EldoS, Alexander Ionov于1998-2001写的ElAes.pas代码,存在一个问题. 相同的key和 ...
- 用户 'NT Service\MSSQLServerOLAPService' 登录失败
初学SSAS,部署微软官方示例项目AdventureWorksDW2012Multidimensional时出现错误:用户 'NT Service\MSSQLServerOLAPService' 登录 ...
- getopt函数
getopt -- 解析命令的可选项 [说明]getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下: 1.形如:cmd [-a][-b] //对短选项的解析: ...
- js 背景从无到黑的渐变 字从白到黑的渐变
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java Mybatis 缓存介绍
0 引言 本文主要介绍有关MyBatis的缓存. 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 1. 一级缓存: 基于PerpetualCache 的 HashMap本 ...
- Javascript继承(原始写法,非es6 class)
知识点: Object.create的内部原理: Object.create = function (o) { var F = function () {}; F.prototype ...
- ES6继承语法
<!--http://www.56.com/u85/v_MTMyNjk1OTc4.html--> <!DOCTYPE html> <html> <head&g ...
- nyoj399-整除个数
整除个数 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 1.2.3- -n这n(0<n<=1000000000)个数中有多少个数可以被正整数b整除. 输入 ...
- C++调用C#编写的DLL【转】
1.打开VS新建项目 2.在新建项目窗口中选择其他语言->Visual C++->Win 32控制台应用程序,设置名称:MathCon,设置解决方案名:MathCon,这个名字随便你自己取 ...
- iwebshop 增删改查
<?php header("content-type:text/html;charset=utf-8"); class Test extends IController { ...