二分答案。。。然后最大流验证是否可行。。。

没了,好水啊QAQ

 /**************************************************************
Problem: 3993
User: rausen
Language: C++
Result: Accepted
Time:40 ms
Memory:1156 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
typedef double lf;
const int N = ;
const lf inf = 1e10;
const lf eps = 1e-;
const int M = N * N << ; inline int read(); struct edge {
int next, to;
lf f;
edge(int _n = , int _t = , lf _f = 0.0) : next(_n), to(_t), f(_f) {}
} e[M]; int n, m, S, T;
int b[N];
int first[N], tot = ;
int q[N], d[N]; inline void Add_Edges(int x, int y, lf z) {
e[++tot] = edge(first[x], y, z), first[x] = tot;
e[++tot] = edge(first[y], x, ), first[y] = tot;
} #define y e[x].to
#define p q[l]
bool bfs() {
static int l, r, x;
memset(d, -, sizeof(d));
d[q[] = S] = ;
for (l = r = ; l != r + ; ++l)
for (x = first[p]; x; x = e[x].next)
if (!~d[y] && e[x].f > eps) {
d[q[++r] = y] = d[p] + ;
if (y == T) return ;
}
return ;
}
#undef p lf dfs(int p, lf lim) {
if (p == T || !lim) return lim;
int x;
lf tmp, rest = lim;
for (x = first[p]; x && rest > eps; x = e[x].next)
if (d[y] == d[p] + && ((tmp = min(e[x].f, rest)) > eps)) {
rest -= (tmp = dfs(y, tmp));
e[x].f -= tmp, e[x ^ ].f += tmp;
if (!rest) return lim;
}
if (rest > eps) d[p] = -;
return lim - rest;
} inline bool check(lf t) {
static int x;
for (x = ; x <= tot; x += )
e[x].f += e[x ^ ].f, e[x ^ ].f = ;
for (x = first[S]; x; x = e[x].next)
e[x].f = b[y - n] * t;
while (bfs()) dfs(S, inf);
for (x = first[T]; x; x = e[x].next)
if (e[x ^ ].f > eps) return ;
return ;
}
#undef y int main() {
int i, j;
lf l, r, mid;
n = read(), m = read();
S = n + m + , T = S + ;
for (i = ; i <= n; ++i)
Add_Edges(i, T, read());
for (i = ; i <= m; ++i)
b[i] = read(), Add_Edges(S, n + i, );
for (i = ; i <= m; ++i)
for (j = ; j <= n; ++j)
if (read() == ) Add_Edges(n + i, j, inf);
l = , r = 5e6;
while (r - l > eps) {
mid = (l + r) / 2.0;
if (check(mid)) r = mid;
else l = mid;
}
printf("%.6lf\n", (l + r) / 2.0);
return ;
} inline int read() {
static int x;
static char ch;
x = , ch = getchar();
while (ch < '' || '' < ch)
ch = getchar();
while ('' <= ch && ch <= '') {
x = x * + ch - '';
ch = getchar();
}
return x;
}

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]星际战争-二分+最大流

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

  4. 【二分答案】【最大流】bzoj3993 [Sdoi2015]星际战争

    二分Time,S->炮[i]:Time*b[i] 炮[i]->机器人[i]:INF 机器人[i]->T:a[i]. 判断是否满流. #include<cstdio> #i ...

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

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

  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. Redis学习记录之————微博项目

    Key设计 全局相关的key: 表名 global 列名 操作 备注 Global:userid incr 产生全局的userid Global:postid Incr 产生全局的postid 用户相 ...

  2. c 函数调用产生的汇编指令和数据在内存情况(2)

    c 函数调用产生的汇编指令和数据在内存情况(1) 一直对函数调用的具体汇编指令和各种变量在内存的具体分配,一知半解.各种资料都很详细,但是不实践,不亲自查看下内存总不能笃定.那就自己做下. 两个目的: ...

  3. [转载] 一些非常好的 linux 基础工具

    http://linuxtools-rst.readthedocs.org/zh_CN/latest/index.html 作者整理的非常好, 需要的时候可以拿来参考

  4. Python学习(8)字符串

    目录 Python 字符串 Python 访问字符串中的值 Python 字符串更新 Python 转义字符 Python 字符串运算符 Python 字符串格式化 Python 三引号 Unicod ...

  5. 搭建LNMP环境

    下载软件包 百度云地址下载地址:http://pan.baidu.com/s/1eSfWNoY 一共有17个包 [root@localhost lnmp]# ls /usr/local/src/lnm ...

  6. linux 通过 ulimit 改善系统性能

    https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何 ...

  7. Matlab中的persistent变量

    persistent, 用于定义persistent变量.persistent变量对于声明它的函数来说是局部的,但是当退出该函数时,该变量仍然保存在内存中,数值并不变.persistent变量与全局变 ...

  8. JavaSE复习_12 Socket网络编程

    △客户端使用Scanner与BufferedReader的异同,Scanner在客户端调用s.shutdownoutput的时候,将会因为读不到行而报异常,但是BufferedReader的readl ...

  9. eclipse xml 注释快捷键

    注释:CTRL + SHIFT + / 撤销注释:CTRL + SHIFT + \

  10. c/c++小知识

    1.printf计算参数时是从右到左 2.(int&)a 表示把a在内存中的值强行当作int数来处理 3.float四字节,1位符号位(正数为0),8位指数位(0采取01111111),23位 ...