[SDOI2015] 星际战争 题解
假如将所有激光武器放在一边,所有机器人放在一边,激光武器向它可以伤害的机器人连边,再加超级源/汇点,这就是一个网络流问题。
考虑激光武器向机器人连的边容量无限,而机器人向超级汇点连的边容量为机器人的装甲值,而超级源点连向激光武器的边则是用时 \(\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] 星际战争 题解的更多相关文章
- 洛谷P3324 [SDOI2015]星际战争 题解
题目链接: https://www.luogu.org/problemnew/show/P3324 分析: 因为本题的时间点较多,不能枚举,但发现有单调性,于是二分答案,二分使用的时间TTT 每个攻击 ...
- 3993: [SDOI2015]星际战争
3993: [SDOI2015]星际战争 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1244 Solved: ...
- 【BZOJ3993】[SDOI2015]星际战争 二分+最大流
[BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- bzoj3993: [SDOI2015]星际战争(网络流)
3993: [SDOI2015]星际战争 题目:传送门 题解: 洛谷AC了,但是因为bzoj的spj有问题所以暂时没A 一道老题目了,二分时间然后网络流判断. 每次st-->武器连时间*攻击力 ...
- BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]
3993: [SDOI2015]星际战争 题意:略 R1D2T1考了裸二分答案+二分图最大匹配... #include <iostream> #include <cstdio> ...
- BZOJ_3993_[SDOI2015]星际战争_二分+网络流
BZOJ_3993_[SDOI2015]星际战争_二分+网络流 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进 ...
- bzoj千题计划131:bzoj3993: [SDOI2015]星际战争
http://www.lydsy.com/JudgeOnline/problem.php?id=3993 二分答案 源点向武器连 mid*攻击力的边 机器人向汇点连 防御力 的边 武器i能攻击机器人j ...
- 洛谷P3324 [SDOI2015]星际战争
题目:洛谷P3324 [SDOI2015]星际战争 思路: 类似<导弹防御塔>,因为题目保证有解,花费时间小于最终答案时一定无法消灭所有敌人,只要花费时间大于等于最终答案都可以消灭所有敌人 ...
- 【题解】[SDOI2015]星际战争
\(\color{red}{Link}\) \(\text{Solution:}\) 观察到,如果一个时间\(T\)可以完成任务,则\(T+1\)这个时间也可以完成任务. 于是我们可以二分. 为了避免 ...
- 【BZOJ】3993: [SDOI2015]星际战争
题意 \(m\)个人\(n\)个物品,第\(i\)个物品生命值为\(A_i\),第\(i\)个人每秒可以减少一个物品\(B_i\)的生命值,给出一个\(m \times n\)的矩阵,如果\(i\)行 ...
随机推荐
- HASHCTF2024
第一届山东大学HASHCTF部分Misc题解 下面是我在本次比赛出的题目的WriteUp Secret of Keyboard 签到脚本题,有些同学的脚本解出来大小写不正确可能是由于脚本无法识别shi ...
- 使用 Jmeter进行压测
一.环境配置 因为jmeter需要java环境,所以需要下载Jdk和Jmeter.需要注意jdk的版本和jmeter的匹配问题 推荐大家观看Furion的作者百小僧的视频来学习,讲的很细 https: ...
- 《前端运维》五、k8s--2pod、services与Ingress部署
前一篇啊,我们学完了基本的配置.这一篇,我们来看下服务部署的配置.我们先来看张图,理解下k8s的应用场景和调用流程: 看上图,首先,master是控制节点,负责编排.管理.调度用户提交的作业.kube ...
- 腾讯云 CHDFS 助力微信秒级异常检测
微信全景监控平台介绍 微信全景监控平台,是微信的多维指标 OLAP 监控以及数据分析平台.支持自定义多维度指标上报,海量数据实时上卷下钻分析,提供了秒级异常检测告警能力. 项目高效支撑了视频号.微信支 ...
- 中电金信:GienTech动态| 获奖、合作、与伙伴共谋数字化转型…
-- -- GienTech动态 -- -- 中电金信携"源启"亮相第十二届中国电子信息博览会 4月11日,为期三天的"第十二届中国电子信息博览会" ...
- 买苹果MacBook Pro ,有必要买care吗?
先了解一下AppleCare+ for Mac的服务范围:将原先的一年保修延长至三年,并且提供两次收取服务费的意外保修服务,以及当电池寿命低于80%时免费的电池更换.其中,意外保修服务依然是要收费的, ...
- Powercat 无文件落地执行技巧,你确定不进来看看?
声明:本文主要用作技术分享,所有内容仅供参考.任何使用或依赖于本文信息所造成的法律后果均与本人无关.请读者自行判断风险,并遵循相关法律法规. 目录 完整示例 注意事项 演示 无文件落地执行(filel ...
- 2021年最新js手机号正则验证 最全全部号段
手机号验证正则 /^1[3-9]\d{9}$/ js的例子 isphone.html <html> <body> <input id="Tel" ty ...
- Qt编写跨平台RTSP/RTMP/HTTP视频流播放器
一.前言 很早以前就做过这款播放器的入门版本,最开始用的ffmpeg去解析,后面陆续用vlc播放器.mpv播放器来做,毕竟播放器提供的接口使用也很方便,而且功能强大,后面发现播放器主要的应用场景是播放 ...
- Windows上使用CMake GUI编译开源代码时,提示:cmake Could NOT find ZLIB (missing:ZLIB_LIBRARY)和Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)的处理办法
有的时候就算在CMake GUI中配置完ZLIB_LIBRARY和PNG_LIBRARY和PNG_PNG_INCLUDE_DIR等相关路径,还是提示上述错误.原因还是由于编译某源码时遗漏了对第三方开源 ...