bzoj 3993: [SDOI2015]星际战争
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#define N 1008
#define M 1000009
#define eps 0.00001
using namespace std;
int S,T,A[N],B[N],f[N][N],n,m,cnt=,tot,head[N],next[M],u[M],d[N],q[N];
double v[M],sum;
void jia1(int a1,int a2,double a3)
{
cnt++;
next[cnt]=head[a1];
head[a1]=cnt;
u[cnt]=a2;
v[cnt]=a3;
return;
}
void jia(int a1,int a2,double a3)
{
jia1(a1,a2,a3);
jia1(a2,a1,);
return;
}
bool bfs()
{
memset(d,,sizeof(d));
int h=,t=;
q[]=S;
d[S]=;
for(;h<t;)
{
h++;
int p=q[h];
for(int i=head[p];i;i=next[i])
if(!d[u[i]]&&v[i])
{
d[u[i]]=d[p]+;
if(d[T])
return ;
t++;
q[t]=u[i];
}
}
return ;
}
double dinic(int s,double f)
{
if(s==T)
return f;
double rest=f;
for(int i=head[s];i&&rest;i=next[i])
if(v[i]&&d[u[i]]==d[s]+)
{
double now=dinic(u[i],min(rest,v[i]));
if(!now)
d[u[i]]=;
v[i]-=now;
v[i^]+=now;
rest-=now;
}
return f-rest;
}
void jian(double mid)
{
cnt=;
memset(head,,sizeof(head));
for(int i=;i<=n;i++)
jia(i+m,T,A[i]);
for(int i=;i<=m;i++)
jia(S,i,B[i]*mid);
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
if(f[i][j])
jia(i,j+m,);
return;
}
int main()
{
scanf("%d%d",&n,&m);
S=;
T=n+m+;
for(int i=;i<=n;i++)
{
scanf("%d",&A[i]);
sum+=(double)A[i];
}
for(int i=;i<=m;i++)
scanf("%d",&B[i]);
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
scanf("%d",&f[i][j]);
double l=,r=,qq;
for(;r-l>eps;)
{
double mid=(l+r)/2.0;
jian(mid);
double ans=;
for(;bfs();)
ans+=dinic(S,0x7fffffff);
if(ans>=(sum-eps))
{
qq=mid;
r=mid;
}
else
l=mid;
}
printf("%.6lf\n",qq);
return ;
}
二分答案网络流。
bzoj 3993: [SDOI2015]星际战争的更多相关文章
- BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]
3993: [SDOI2015]星际战争 题意:略 R1D2T1考了裸二分答案+二分图最大匹配... #include <iostream> #include <cstdio> ...
- BZOJ 3993 [SDOI2015]星际战争 | 网络流 二分答案
链接 BZOJ 3993 题解 这道题挺棵的-- 二分答案t,然后源点向武器连t * b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行. #inc ...
- 网络流(二分):BZOJ 3993: [SDOI2015]星际战争
Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈 地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型 ...
- 3993: [SDOI2015]星际战争
3993: [SDOI2015]星际战争 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1244 Solved: ...
- 【BZOJ】3993: [SDOI2015]星际战争
题意 \(m\)个人\(n\)个物品,第\(i\)个物品生命值为\(A_i\),第\(i\)个人每秒可以减少一个物品\(B_i\)的生命值,给出一个\(m \times n\)的矩阵,如果\(i\)行 ...
- bzoj千题计划131:bzoj3993: [SDOI2015]星际战争
http://www.lydsy.com/JudgeOnline/problem.php?id=3993 二分答案 源点向武器连 mid*攻击力的边 机器人向汇点连 防御力 的边 武器i能攻击机器人j ...
- bzoj3993: [SDOI2015]星际战争(网络流)
3993: [SDOI2015]星际战争 题目:传送门 题解: 洛谷AC了,但是因为bzoj的spj有问题所以暂时没A 一道老题目了,二分时间然后网络流判断. 每次st-->武器连时间*攻击力 ...
- BZOJ_3993_[SDOI2015]星际战争_二分+网络流
BZOJ_3993_[SDOI2015]星际战争_二分+网络流 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进 ...
- 【BZOJ3993】[SDOI2015]星际战争 二分+最大流
[BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
随机推荐
- .net平台下获取高精度时间类
原文:http://www.it118.org/specials/321869dd-98cb-431b-b6d2-82d973cd739d/d940a15c-0d36-4369-8de0-b07cf3 ...
- 后缀数组:倍增法和DC3的简单理解
一些定义:设字符串S的长度为n,S[0~n-1]. 子串:设0<=i<=j<=n-1,那么由S的第i到第j个字符组成的串为它的子串S[i,j]. 后缀:设0<=i<=n- ...
- solrconfig.xml解析
solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置.下面将对solrconfig进行详细描述:1 <luceneMatc ...
- Ubuntu install g++
We can use two ways to install g++ on Ubuntu. 1. a. sudo apt-get install make gcc g++. b. sud ...
- js巧用apply方法实现数组最值以及合并
尽管js的apply方法在平常的使用中并不多见,但是在某些地方使用的还是很有帮助性的,这里就和大家说两个比较实用的例子:1.数组最大最小值 求数组中的最大最小值,js有相应的方法:Math.min() ...
- jquery总结06-动画事件01-基础显示和隐藏
动画事件 .hide(option) 动画隐藏 会保存元素的原始属性值 $("#a2").hide({ duration: 3000, complete: function() ...
- Java抛出OutOfMemoryError:Java heap space堆内存溢出错误的分析方案
抛出堆内存溢出的错误一定要记得保留现场环境(导出堆内存信息到文件),否则如果无法进行分析,并从根本上解决问题,下次很有可能还会出现. 第一步:导出堆转储文件 我们可以使用Jdk自带的jmap工具.使用 ...
- php 判断当前的操作系统的方法
因为windows 和 linux 下的标识符是不一样的,所以写了个方法来获取当前的标识符. /** * 对操作系统进行判断 * @return string */ static function j ...
- 插件dTree的使用
解压缩dtree.zip 包. dtree目录下包括这些文件:example01.html . dtree.js . api.html . dtree.css 和img目录 注意:除了a ...
- MFC编程入门之十九(对话框:颜色对话框)
在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框--颜色对话框. 颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用是用来选择颜色.MF ...