二分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;
}

【二分答案】【最大流】bzoj3993 [Sdoi2015]星际战争的更多相关文章

  1. bzoj千题计划131:bzoj3993: [SDOI2015]星际战争

    http://www.lydsy.com/JudgeOnline/problem.php?id=3993 二分答案 源点向武器连 mid*攻击力的边 机器人向汇点连 防御力 的边 武器i能攻击机器人j ...

  2. bzoj3993: [SDOI2015]星际战争(网络流)

    3993: [SDOI2015]星际战争 题目:传送门 题解: 洛谷AC了,但是因为bzoj的spj有问题所以暂时没A 一道老题目了,二分时间然后网络流判断. 每次st-->武器连时间*攻击力 ...

  3. bzoj3993: [SDOI2015]星际战争(二分+最大流)

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  4. [bzoj3993][SDOI2015]星际战争-二分+最大流

    Brief Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai. ...

  5. BZOJ3993 [SDOI2015]星际战争

    二分答案...然后最大流验证是否可行... 没了,好水啊QAQ /************************************************************** Prob ...

  6. BZOJ3993 [SDOI2015]星际战争 【二分 + 网络流】

    题目 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到 ...

  7. 【BZOJ3993】[SDOI2015]星际战争 二分+最大流

    [BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...

  8. BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]

    3993: [SDOI2015]星际战争 题意:略 R1D2T1考了裸二分答案+二分图最大匹配... #include <iostream> #include <cstdio> ...

  9. 【BZOJ3993】星际战争(网络流,二分答案)

    [BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团 ...

随机推荐

  1. codeforces 1015C

    C. Songs Compression time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. idea中如何配置git以及在idea中初始化git

    idea中如何配置git以及在idea中初始化git呢: 参考此博文: http://blog.csdn.net/qq_28867949/article/details/73012300 *为了这个问 ...

  3. zigbee ---- profile 和 cluster

    在zigbee规范中,引入了profile, cluster的概念.具体说来,假设规范一个profile(可以理解成一套规定),这个profile用来规范智能家居领域的相关产品都要满足那些要求,那么h ...

  4. php-instanceof运算符

    1.关于 instanceof 的一些基本概念 1).instanceof 用于确定一个PHP变量是否属于某一类class的实例: <?php class MyClass { } class N ...

  5. java属性为什么没多态,而是方法多态

    定义 java多肽的特性:方法具有多态性,属性却没有. 准备 基类: 子类: 测试类: 结果: 分析如下 父类 a=new 子类,实际对象时子类.由于向上转型,我们可以用父类在编译期间代替子类,使得编 ...

  6. POJ 3070 + 51Nod 1242 大斐波那契数取余

    POJ 3070 #include "iostream" #include "cstdio" using namespace std; class matrix ...

  7. [BZOJ3098]Hash Killer II解题报告

    这天天气不错,hzhwcmhf神犇给VFleaKing出了一道题:给你一个长度为N的字符串S,求有多少个不同的长度为L的子串.子串的定义是S[l].S[l + 1].... S[r]这样连续的一段.两 ...

  8. 【洛谷 P2346】四子连棋(状态压缩,搜索)

    其实这题可以直接二进制状压做,1表示黑棋,0表示白棋,另外记录下2个空点的位置就行了. 具体看代码(冗长): #include <iostream> #include <cstdio ...

  9. Github上的几个C++开源项目

    Github上的几个C++开源项目 http://blog.csdn.net/fyifei0558/article/details/47001677 http://www.zhihu.com/ques ...

  10. intValue()的用法

    今天看到了Integer的这个方法,有点疑惑,查了下,做下笔记; 1.intValue()是java.lang.Number类的方法,Number是一个抽象类.Java中所有的数值类都继承它.也就是说 ...