分数规划的裸题。

不会分数规划的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+5;
const int Z=105;
typedef long double real;
const real eps=1e-8;
int n,m,S,T,a[Z][Z],b[Z][Z];
int to[N],next[N],cap[N];real cost[N];int tot=1,head[N];
real dis[N];int q[N],pre[N];bool vis[N];
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';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]=0;cost[tot]=-Cost;next[tot]=head[y];head[y]=tot;
}
bool spfa(){memset(vis,0,sizeof vis);for(int i=0;i<=T+10;i++) dis[i]=-1e9;unsigned short h=0,t=1;q[t]=S;dis[S]=0;while(h!=t){int x=q[++h];vis[x]=0;for(int i=head[x];i;i=next[i]){if(cap[i]>0&&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]]=1;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=1;for(int i=T;i!=S;i=to[pre[i]^1]){cap[pre[i]]-=flow;cap[pre[i]^1]+=flow;}return dis[T]*flow;
}
real mapping(real ans){tot=1;S=0;T=n<<1|1;memset(head,0,sizeof head);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,(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 0;return x>0?1:-1;
}
void work1(){tot=1;S=0;T=n<<1|1;memset(head,0,sizeof head);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,(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=0,v=0;for(int i=1,t;i<=n;i++){t=0;for(int j=1;j<=n;j++){a[i][j]=read();t=max(t,a[i][j]);}u+=t;}bool f=1;for(int i=1,t;i<=n;i++){t=1e9;for(int j=1;j<=n;j++){b[i][j]=read();t=min(t,b[i][j]);if(b[i][j]!=1) f=0;}v+=t;}if(f){work1();return 0;}real l=0,r=(real)(u+v-1)/(real)v,mid,ans=0,now;while(l+eps<r){mid=(l+r)/2.0;now=mapping(mid);if(cmp(now)==0){printf("%.6lf\n",(double)mid);return 0;}if(cmp(now)>0) l=mid;else r=mid;}printf("%.6lf\n",(double)l);fclose(stdin);fclose(stdout);return 0;
}

转载于:https://www.cnblogs.com/shenben/p/6696511.html

codevs 5965 [SDOI2017]新生舞会相关推荐

  1. BZOJ 4819: [Sdoi2017]新生舞会

    二次联通门 : BZOJ 4819: [Sdoi2017]新生舞会 /*BZOJ 4819: [Sdoi2017]新生舞会二分 + 01分数规划 + 最小费用流二分出一个答案费用流检验*/ #incl ...

  2. BZOJ4819: [Sdoi2017]新生舞会

    BZOJ4819: [Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有n个男生和n个女生参加舞会买一个男生和一个女 ...

  3. 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)

    4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 601  Solved: 313 Description 学 ...

  4. [SDOI2017]新生舞会

    题目描述 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有个男生和个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴. Cathy收集了这些同学之间的关系,比如两个 ...

  5. BZOJ 4819 Luogu P3705 [SDOI2017]新生舞会 (最大费用最大流、二分、分数规划)

    现在怎么做的题都这么水了.. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4819 (luogu) https://ww ...

  6. SDOI2017 新生舞会

    01规划 a1+a2+a3+...+ai/b1+b2+b2+..bi最大 设一个k 使得 a1+a2+a3+...+ai/b1+b2+b3+...bi>=k 变换式子得到 a1+a2+a3+.. ...

  7. bzoj4819 [Sdoi2017]新生舞会 分数规划(实数二分)+网络流检验

    这个题其实就是二分检验.. 稍微移个项就可以得到(a1-c*b1)+(a2-c*b2)+-- 这样贡献就化成了具体到每次决策的影响,c显然满足连续性,所以可以二分c 跑最大流以求得到最大的值使当前答案 ...

  8. bzoj 4819 [Sdoi2017]新生舞会

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4819 题解 这题很好想 首先二分答案 然后令w[i][j]=a[i][j]-b[i][j]* ...

  9. 【BZOJ4819】【SDOI2017】新生舞会(01分数规划,带权二分图匹配)

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的 ...

最新文章

  1. html列表拖拽排序插件,可对列表自由拖拽排序的jQuery插件
  2. C和C++中的##和#
  3. 没学过python、但是还是有公司要-想转行,是要入坑Python还是Java?这问题还用问?...
  4. 错误处理: socket.timeout: The read operation timed out
  5. Java反射机制应用实践
  6. java中让数据生成excle文件并且支持下载
  7. php自定义框架,「php 框架」自定义php框架(篇一) - seo实验室
  8. OkHttp3中的代理与路由
  9. 浏览器输入网址到浏览器渲染页面的过程
  10. [bzoj2875][Noi2012]随机数生成器
  11. python string模块template_Python - 定制pattern的string模板(template) 详解
  12. 阿里云 ecs mysql搭建_使用ECS和mysql搭建mysql服务器-阿里云开发者社区
  13. java 反射类成员_java 反射(二)类成员
  14. 从零开始,DIY一个jQuery(2)
  15. Topcoder SRM 637 (Div.2)
  16. Promise.all和Promise.race区别,和使用场景
  17. linux 6.4 nfs配置,RHEL6.4 NFS文件共享服务器搭建
  18. 二开要饭网免费开源源码
  19. cad在服务器那个文件夹,CAD存放文件的路径默认在哪里
  20. androidx 填坑记

热门文章

  1. 普通用户通过Putty密钥方式登录
  2. MySQL: ERROR13(HY000):Can't get stat of的问题
  3. 微软称伊朗国家黑客攻击美国国防技术公司
  4. NSNotification 消息通知的3种方式
  5. 利用lxml爬取豆瓣小组内容文档并保存
  6. singleton pattern的推荐实现
  7. puppet 认证错误:Could not request certificate: unknown message digest algorithm
  8. 【Oracle学习笔记】
  9. 服務端的EIT造形+Socket代碼
  10. hdoj_1166_敌兵布阵_树状数组