二分Time,
S->炮[i]:Time*b[i]

炮[i]->机器人[i]:INF

机器人[i]->T:a[i]。

判断是否满流。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
#define N 51
#define EPS 0.000001
#define INF 2147483647.0
typedef double db;
queue<int>q;
int n,m,a[N],b[N],sumv;
bool can[N][N];
int v[2*N*(N+1)],en,first[N*2+3],next[2*N*(N+1)];
db cap[2*N*(N+1)];
void AddEdge(int U,int V,db W)
{
v[en]=V; cap[en]=W; next[en]=first[U]; first[U]=en++;
v[en]=U; cap[en]=0; next[en]=first[V]; first[V]=en++;
}
int S,T,nn;
int d[N*2+3],cur[N*2+3];
bool bfs()
{
memset(d,-1,sizeof(int)*(nn+1));
d[S]=0;
q.push(S);
while(!q.empty())
{
int U=q.front(); q.pop();
for(int i=first[U];i!=-1;i=next[i])
if(d[v[i]]==-1&&cap[i]>EPS)
{
d[v[i]]=d[U]+1;
q.push(v[i]);
}
}
return d[T]!=-1;
}
db dfs(int U,db a)
{
if(U==T||a<=EPS)
return a;
db Flow=0.0,f;
for(int &i=cur[U];i!=-1;i=next[i])
if(d[v[i]]==d[U]+1&&(f=dfs(v[i],min(a,cap[i])))>EPS)
{
cap[i]-=f;
cap[i^1]+=f;
Flow+=f;
a-=f;
if(a<=EPS)
break;
}
if(Flow<=EPS) d[U]=-1;
return Flow;
}
db MaxFlow()
{
db Flow=0.0,tmp;
while(bfs())
{
memcpy(cur,first,sizeof(int)*(nn+1));
while((tmp=dfs(S,INF))>EPS) Flow+=tmp;
}
return Flow;
}
bool check(db Lim)
{
memset(first,-1,sizeof(int)*(nn+1));
en=0;
for(int i=1;i<=m;++i)
AddEdge(S,1+i,Lim*(db)b[i]);
for(int i=1;i<=n;++i)
AddEdge(1+m+i,T,(db)a[i]);
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(can[i][j])
AddEdge(1+i,1+m+j,INF);
return fabs(MaxFlow()-(db)sumv)<=EPS?1:0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
sumv+=a[i];
}
for(int i=1;i<=m;++i) scanf("%d",&b[i]);
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
scanf("%d",&can[i][j]);
S=1; T=nn=m+n+2;
db l=0.0,r=5000000.0;
while(r-l>EPS)
{
db mid=(l+r)/2.0;
if(check(mid))
r=mid-EPS;
else
l=mid+EPS;
}
printf("%lf\n",l);
return 0;
}

最新文章

  1. Android 学习笔记之三—— 音效的使用
  2. VR技术的系统化实现阶段
  3. Windows Azure CN 超业余性能测试
  4. vs2013如何在C++中调用Lua(二)
  5. 【转】Swift开源项目精选
  6. POJ1011 Sticks
  7. 函数lock_rec_get_first
  8. memcached学习——大纲简介 &amp;&amp; 安装(基于centos6.5)、启动、关闭memcached(一)
  9. SVN将一台服务器上的代码迁移到另一台服务器上
  10. 还原数据库“XXX”时失败。System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份。
  11. 微信小程序语音识别服务搭建全过程解析(项目开源在github)
  12. vue-cli完整地引入element-ui
  13. 20181115 python-第一章学习小结part3
  14. 28 ArcMap 运行特别慢怎么办
  15. web框架开发-Django用户认证组件
  16. Entity Framework Core的贴心:优雅处理带默认值的数据库字段
  17. Laravel创建产品-CRUD之Create and Store
  18. 爬虫之mongodb数据库
  19. C# Newtonsoft.Json解析数组的小例子[转]
  20. xorm的sql builder

热门文章

  1. Mockito中@Mock与@InjectMock
  2. The XOR Largest Pair [Trie]
  3. [poj 2104]主席树+静态区间第k大
  4. bzoj 3456 城市规划 多项式求逆+分治FFT
  5. PHP报错Cannot adopt OID in UCD-SNMP-MIB、 LM-SENSORS-MIB
  6. CSS属性中cursor:hand
  7. Ubuntu 编译Webkit --gtk
  8. 2017南宁现场赛E The Champion
  9. HDU5772 String problem
  10. 之江学院第0届校赛 qwb去面试 (找规律)