SDOI2017 新生舞会
01规划
a1+a2+a3+...+ai/b1+b2+b2+..bi最大
设一个k
使得
a1+a2+a3+...+ai/b1+b2+b3+...bi>=k
变换式子得到
a1+a2+a3+...ai>=(b1+b2+b3+..+bi)*k
a1-b1*k+a2-b2*k+a3-b3*k+...+ai-bi*k>=0
ai-bi*k即流量
最大费用流+二分答案
来,上代码:
#include <cmath> #include <cstdio> #include <iostream>using namespace std;#define eps 1e-8 #define maxn 205int ai[maxn][maxn],bi[maxn][maxn],ma,mi,pre[maxn],s,t,h,tail,cnt; int n,head[maxn],E[maxn*maxn],V[maxn*maxn],F[maxn*maxn],que[maxn<<8];double W[maxn*maxn],suma,sumb,dis[maxn];bool if_[maxn];inline void in(int &now_) {register int now=0;register char Cget=getchar();while(Cget>'9'||Cget<'0') Cget=getchar();while(Cget>='0'&&Cget<='9'){now=now*10+Cget-'0';Cget=getchar();}now_=now; }inline bool spfa() {for(int i=s;i<=t;i++) dis[i]=-1e6,pre[i]=-1,if_[i]=false;h=maxn<<4,tail=h+1,que[h]=s,dis[s]=0,if_[s]=true;while(h<tail){register int now=que[h++];if_[now]=false;for(register int i=head[now];i;i=E[i]){if(dis[V[i]]<dis[now]+W[i]&&F[i]>0){pre[V[i]]=i;dis[V[i]]=dis[now]+W[i];if(!if_[V[i]]){if_[V[i]]=true;if(dis[V[i]]>dis[que[h]]) que[--h]=V[i];else que[tail++]=V[i];}}}}return dis[t]!=-1e6; }int main() {freopen("ball.in","r",stdin);freopen("ball.out","w",stdout);in(n);t=n<<1|1;for(register int i=1;i<=n;i++){ma=0;for(register int j=1;j<=n;j++) in(ai[i][j]),ma=max(ma,ai[i][j]);suma+=ma;}for(register int i=1;i<=n;i++){mi=0x7fffffff;for(register int j=1;j<=n;j++) in(bi[i][j]),mi=min(mi,bi[i][j]);sumb+=mi;}double l=0,r=suma/sumb,mid,ans;while(r-l>eps){mid=(l+r)/2.0,cnt=1;for(register int i=s;i<=t;i++) head[i]=0;for(register int i=1;i<=n;i++){E[++cnt]=head[s],V[cnt]=i,F[cnt]=1,W[cnt]=0,head[s]=cnt;E[++cnt]=head[i],V[cnt]=s,F[cnt]=0,W[cnt]=0,head[i]=cnt;E[++cnt]=head[t],V[cnt]=i+n,F[cnt]=0,W[cnt]=0,head[t]=cnt;E[++cnt]=head[i+n],V[cnt]=t,F[cnt]=1,W[cnt]=0,head[i+n]=cnt;for(register int j=1;j<=n;j++){register int o=j+n;register double pos=(double)ai[i][j]-mid*bi[i][j];E[++cnt]=head[i],V[cnt]=o,F[cnt]=1,W[cnt]=pos,head[i]=cnt;E[++cnt]=head[o],V[cnt]=i,F[cnt]=0,W[cnt]=-pos,head[o]=cnt;}}double sum=0;while(spfa()){sum+=dis[t];register int now=t;while(pre[now]!=-1) F[pre[now]]--,F[pre[now]^1]++,now=V[pre[now]^1];}if(sum>0) ans=mid,l=mid+eps;else r=mid-eps;}printf("%.6lf",ans);fclose(stdin),fclose(stdout);return 0; }
转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6691178.html
SDOI2017 新生舞会相关推荐
- BZOJ 4819: [Sdoi2017]新生舞会
二次联通门 : BZOJ 4819: [Sdoi2017]新生舞会 /*BZOJ 4819: [Sdoi2017]新生舞会二分 + 01分数规划 + 最小费用流二分出一个答案费用流检验*/ #incl ...
- BZOJ4819: [Sdoi2017]新生舞会
BZOJ4819: [Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有n个男生和n个女生参加舞会买一个男生和一个女 ...
- 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 601 Solved: 313 Description 学 ...
- [SDOI2017]新生舞会
题目描述 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有个男生和个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴. Cathy收集了这些同学之间的关系,比如两个 ...
- BZOJ 4819 Luogu P3705 [SDOI2017]新生舞会 (最大费用最大流、二分、分数规划)
现在怎么做的题都这么水了.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4819 (luogu) https://ww ...
- bzoj4819 [Sdoi2017]新生舞会 分数规划(实数二分)+网络流检验
这个题其实就是二分检验.. 稍微移个项就可以得到(a1-c*b1)+(a2-c*b2)+-- 这样贡献就化成了具体到每次决策的影响,c显然满足连续性,所以可以二分c 跑最大流以求得到最大的值使当前答案 ...
- codevs 5965 [SDOI2017]新生舞会
分数规划的裸题. 不会分数规划的OIer.百度:胡伯涛<最小割模型在信息学竞赛中的应用> /* TLE1: last:add(i,j+n,1e9,(real)((real)a[i][j]- ...
- bzoj 4819 [Sdoi2017]新生舞会
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4819 题解 这题很好想 首先二分答案 然后令w[i][j]=a[i][j]-b[i][j]* ...
- 【BZOJ4819】【SDOI2017】新生舞会(01分数规划,带权二分图匹配)
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的 ...
最新文章
- c语言在键盘输入abc回车,C语言期末考试试卷子商务1111、21.doc
- ehcache使用_Mybatis整合(Redis、Ehcache)实现二级缓存,恕我直言,你不会
- 公开课视频-浅谈前端性能测试
- 小白Linux入门之:常用命令介绍
- SpringMVC中@RequestMapping参数设置
- editplus破解源码
- POI合并单元格后设置边框
- 十大排序算法总结与实现
- FPGA Vivado AXI _DMA IP介绍
- css中鼠标手,css各种鼠标手型集合
- termux获取sd卡读写权限_原来是用错了读卡器,雷克沙lexar 1667X 真实读写性能测试...
- 常用的软件工程相关技术标准
- C++ GUI Programming with Qt4 Second Edition 之 附录A.3 Mac系统Qt的安装
- Communication error with Jack server
- Java通过javacsv实现读取csv文件数据
- 【ubuntu】首选项和应用程序命令(preference application)
- 安装了,还是显示证书无效
- 计算机网络---TCP流量控制和拥塞控制
- python3的飞机大战实现
- 将oracle 转换 bak格式,MSSQL数据库文件MS.BAK转换为ORACLE数据库文件OR.dmp