博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4819 [Sdoi2017]新生舞会 ——费用流 01分数规划
阅读量:6164 次
发布时间:2019-06-21

本文共 1311 字,大约阅读时间需要 4 分钟。

比值最大 分数规划

二分答案之后用费用流进行验证。

据说标称强行乘以1e7换成了整数的二分。

不过貌似实数二分也可以过。

#include #include 
#include
#include
#include
#include
#include
using namespace std;#define F(i,j,k) for (int i=j;i<=k;++i)#define D(i,j,k) for (int i=j;i>=k;--i)#define ll long long#define mp make_pair#define eps 1e-7#define inf 1e9#define maxn 50005 int h[maxn],to[maxn],ne[maxn],en=0,fl[maxn],n,S=maxn-2,T=maxn-1;double cost[maxn],a[101][101],b[101][101],dis[maxn];int with[maxn],minn[maxn],inq[maxn]; void add(int a,int b,double c,int d){ to[en]=b;ne[en]=h[a];fl[en]=d;cost[en]=c; h[a]=en++; to[en]=a;ne[en]=h[b];fl[en]=0;cost[en]=-c;h[b]=en++;} queue
q; bool SPFA(){ F(i,1,2*n) dis[i]=inf; dis[S]=inf; dis[T]=inf; memset(inq,0,sizeof inq); memset(with,0,sizeof with); memset(minn,0x3f,sizeof minn); q.push(S); inq[S]=1; dis[S]=0; while (!q.empty()) { int x=q.front(); q.pop(); inq[x]=0; for (int i=h[x];i>=0;i=ne[i]) if (dis[to[i]]>dis[x]+cost[i]&&fl[i]>0) { dis[to[i]]=dis[x]+cost[i]; minn[to[i]]=min(minn[x],fl[i]); with[to[i]]=i; if (!inq[to[i]]) q.push(to[i]),inq[to[i]]=1; } } return dis[T]
eps) { double mid=(l+r)/2; if (check(mid)) l=mid; else r=mid; } printf("%.6lf\n",(l+r)/2);}

  

转载于:https://www.cnblogs.com/SfailSth/p/6737591.html

你可能感兴趣的文章
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>
Java集合---HashMap源码剖析
查看>>
SQL优化技巧
查看>>
thead 固定,tbody 超出滚动(附带改变滚动条样式)
查看>>
Dijkstra算法
查看>>
css 动画 和 响应式布局和兼容性
查看>>
csrf 跨站请求伪造相关以及django的中间件
查看>>