假如将所有激光武器放在一边,所有机器人放在一边,激光武器向它可以伤害的机器人连边,再加超级源/汇点,这就是一个网络流问题。

考虑激光武器向机器人连的边容量无限,而机器人向超级汇点连的边容量为机器人的装甲值,而超级源点连向激光武器的边则是用时 \(\times\) 激光武器伤害。

发现假如答案为 \(ans\),则所有大于 \(ans\) 的情况都可以击溃所有机器人,而用时小于 \(ans\) 则一定无法击溃所有机器人,发现单调性,二分用时,看最大流是否等于机器人装甲值之和。

时间复杂度 \(O((n+m)^2nm\log maxans)\),其中 \(maxans\) 是答案上界。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=105,M=5505;
int n,m,s,t,h[N],d[N],c[N];
int k,to[M],nxt[M],e[N][N];
int w[M],a[N],b[N],sum;
void add(int x,int y,int z){
w[++k]=z;to[k]=y;
nxt[k]=h[x];h[x]=k;
nxt[++k]=h[y];
to[k]=x;h[y]=k;
}int bfs(){
memset(c,-1,sizeof(c));
queue<int>q;q.push(s);
c[s]=0;d[s]=h[s];
while(q.size()){
int x=q.front();q.pop();
for(int i=h[x];i;i=nxt[i]){
int y=to[i],lv=w[i];
if(lv>0&&c[y]==-1)
d[y]=h[y],c[y]=c[x]+1,q.push(y);
}
}return (c[t]==-1)?0:1;
}int dfs(int x,int ans){
if(x==t) return ans;
int now=ans;
for(int i=h[x];i&&now;i=nxt[i]){
int y=to[i];int lv=w[i];
if(lv<1||c[y]!=c[x]+1) continue;
int zjy=dfs(y,min(now,lv));
now-=zjy;w[i]-=zjy;w[i^1]+=zjy;
}return ans-now;
}int dinic(){
int ans=0;
while(bfs())
ans+=dfs(s,1e18);
return ans;
}int check(int x){
memset(h,0,sizeof(h));
memset(to,0,sizeof(to));
memset(w,0,sizeof(w));k=1;
memset(nxt,0,sizeof(nxt));
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(e[i][j]) add(i+n,j,1e18);
for(int i=1;i<=n;i++)
add(i,t,a[i]);
for(int i=1;i<=m;i++)
add(s,i+n,b[i]*x);
if(dinic()==sum) return 1;
return 0;
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;t=n+m+1;
for(int i=1;i<=n;i++)
cin>>a[i],a[i]*=10000,sum+=a[i];
for(int i=1;i<=m;i++) cin>>b[i];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>e[i][j];
int l=0,r=200000000,ans;
while(l<=r){
int mid=(l+r)/2;
if(check(mid))
ans=mid,r=mid-1;
else l=mid+1;
}printf("%.6lf",ans/1e4);
return 0;
}

[SDOI2015] 星际战争 题解的更多相关文章

  1. 洛谷P3324 [SDOI2015]星际战争 题解

    题目链接: https://www.luogu.org/problemnew/show/P3324 分析: 因为本题的时间点较多,不能枚举,但发现有单调性,于是二分答案,二分使用的时间TTT 每个攻击 ...

  2. 3993: [SDOI2015]星际战争

    3993: [SDOI2015]星际战争 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1244  Solved: ...

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

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

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

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

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

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

  6. BZOJ_3993_[SDOI2015]星际战争_二分+网络流

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

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

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

  8. 洛谷P3324 [SDOI2015]星际战争

    题目:洛谷P3324 [SDOI2015]星际战争 思路: 类似<导弹防御塔>,因为题目保证有解,花费时间小于最终答案时一定无法消灭所有敌人,只要花费时间大于等于最终答案都可以消灭所有敌人 ...

  9. 【题解】[SDOI2015]星际战争

    \(\color{red}{Link}\) \(\text{Solution:}\) 观察到,如果一个时间\(T\)可以完成任务,则\(T+1\)这个时间也可以完成任务. 于是我们可以二分. 为了避免 ...

  10. 【BZOJ】3993: [SDOI2015]星际战争

    题意 \(m\)个人\(n\)个物品,第\(i\)个物品生命值为\(A_i\),第\(i\)个人每秒可以减少一个物品\(B_i\)的生命值,给出一个\(m \times n\)的矩阵,如果\(i\)行 ...

随机推荐

  1. 频繁full gc 如何排查

    频繁full gc 通常表明应用程序在内存管理方面存在问题,可能导致性能下降,下面是排查步骤和一个详细的示例 排查步骤 收集GC日志 首先,需要开启详细的GC日志,在JVM参数中添加 -XX:+Pri ...

  2. RocketMQ系列2:领域模型和技术概念

    ★消息队列16篇 1 领域模型 Apache RocketMQ 是一款典型的分布式架构下的消息中间件产品,使用异步通信方式和发布订阅的消息传输模型. Apache RocketMQ 产品具备异步通信的 ...

  3. QEMU固件模拟技术-stm32仿真分析及IRQ仿真实践

    文章首发于 https://forum.butian.net/share/124 概述 上一篇文件介绍了luaqemu的实现,也提到luaqemu并没有对中断相关api进行封装,本节主要基于stm32 ...

  4. 《Visual Studio Code 权威指南》登上京东科技IT新书榜第一名!

    自 6 月 30 日开启预售以来,<Visual Studio Code 权威指南>受到了许多读者朋友的青睐.感谢大家的支持! 仅仅三天时间,<Visual Studio Code ...

  5. 关于 Envoy on Windows

    Window Image in hub.cocker.com envoy 的镜像位于 https://hub.docker.com/u/envoyproxy 之下,其中 Windows 包括如下 4 ...

  6. T 语言语法设计方案总结

    早在 2015,我就已经精通了 C++.C#.JS,也用过其它语言,比如 PHP.Python.Java 做过一些项目,就觉得这些语言设计得太过复杂.坑多.麻烦,所以就开始设计一门新语言,暂且叫 T ...

  7. SpringBoot结合Liquibase实现数据库变更管理

    https://juejin.cn/post/7171232605478584328 https://juejin.cn/post/7170857098538909732 前言 研发过程中经常涉及到数 ...

  8. 一打开终端就默认进入conda的base环境,取消方法

    conda版本:4.10.3 安装conda之后,在使用VSCode的时候,每次在里面使用powershell终端都是默认进入base环境,稍不注意就会用错python解释器,所以考虑取消这一设置.经 ...

  9. 【Mybatis-Plus进阶学习(八)】SQL注入器

    使用SQL注入器就可以自定义例如selectById的默认方法. 实现步骤Step1:创建定义方法的类:Step2:创建注入器:Step3:在Mapper中加入自定义方法. 自定义注入器的简单使用 第 ...

  10. Qt音视频开发42-人脸识别客户端

    一.前言 人脸识别客户端程序,不需要和人脸识别相关的库在一起,而是通过协议通信来和人脸识别服务端通信交互,人脸识别客户端和服务端程序框架,主要是为了提供一套通用的框架,按照定好的协议,实现人脸识别的相 ...