BZOJ3993[SDOI2015]星际战争 【最大流+二分答案】
传送门
SOL
首先思考dp,发现一个合法的方案限制太多,难以dp。
n,m≤50n,m\le50n,m≤50,有点网络流的味道
思考贪心,即在相同的时间内,让所有机器人的总输出尽量大,构造方案可以最大流;
建图:机器人向汇点连容量为装甲值的边,源点向激光炮连边,根据激光炮和机器人的攻击关系连容量为inf的边。
源点向iii激光炮连边容量为 bi∗tb_{i}*tbi∗t,二分ttt,判断总流量能否达到 ∑i=1nAi\sum_{i=1}^n A{i}∑i=1nAi;
CODE
#include<bits/stdc++.h>
using namespace std;
#define sf scanf
#define pf printf
#define ll long long
#define db double
#define cs const
cs int N=1e4+10,mov=50;
ll inf=1e18;
cs db eps=1e-7,eps2=1e-4;
int nxt[N],to[N],head[N],cnt=1,S,T,n,m,A;
ll w[N];
inline void _add(int u,int v,ll ww){nxt[++cnt]=head[u];head[u]=cnt;to[cnt]=v;w[cnt]=ww;
}
//inline bool equal(cs db &a,cs db &b){// return abs(a-b)<eps;
//}
namespace dinic{int dep[N],cur[N];db c[N];inline bool bfs(){for(int i=S;i<=T;++i)dep[i]=-1;queue<int> q;q.push(T);dep[T]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i;i=nxt[i]){if(c[i^1]<eps)continue;int v=to[i];if(v==S){dep[v]=dep[u]+1;return 1;}if(dep[v]==-1){dep[v]=dep[u]+1;q.push(v);}}}return 0;}inline db dfs(int u,db f){if(u==T)return f;if(f<eps)return 0;db tot=0,now=0;for(int &i=cur[u];i;i=nxt[i]){// cout<<to[i]<<' '<<f<<'\n';if(c[i]<eps)continue;int v=to[i];if(dep[v]==dep[u]-1){now=dfs(v,min(f-tot,c[i]));if(!now)continue;tot+=now;c[i]-=now;c[i^1]+=now;if(f-tot<eps)break;}}return tot;}inline bool cflow(db t){db ret=0;for(int i=2;i<=cnt;++i)c[i]=1.0*w[i];for(int i=head[S];i;i=nxt[i]){c[i]=t*w[i];}while(bfs()){for(int i=S;i<=T;++i)cur[i]=head[i];ret+=dfs(S,inf);}return A-ret<eps;}
}signed main(){sf("%d%d",&n,&m);S=0;T=mov+n+1;for(int i=1;i<=n;++i){int num;sf("%d",&num);_add(i+mov,T,num);_add(T,i+mov,0);A+=num;}for(int i=1;i<=m;++i){int num;sf("%d",&num);_add(S,i,num);_add(i,S,0);}for(int i=1;i<=m;++i){for(int j=1;j<=n;++j){int f;sf("%d",&f);if(f){_add(i,j+mov,inf);_add(j+mov,i,0);}}}db l=0,r=5e6,mid;
// cout<<dinic::cflow(1.3)<<'\n';while(l+eps2<r){mid=(l+r)/2.0;if(dinic::cflow(mid))r=mid;else l=mid;}pf("%.3lf",l);return 0;
}
BZOJ3993[SDOI2015]星际战争 【最大流+二分答案】相关推荐
- BZOJ3993: [SDOI2015]星际战争
BZOJ3993: [SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- bzoj3993: [SDOI2015]星际战争(二分+最大流)
题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...
- BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...
- bzoj3993 [SDOI2015]星际战争 二分答案+网络流检验
流量分配模型. 这个题如果时间不知道的话流量是未知的,对于流量未知的网络流肯定是没法做的(没有动态借流量的网络流) 由于时间上满足连续性,就可以二分答案,然后流量确定就可以跑网络流 主要还是化静为动 ...
- bzoj3993 [SDOI2015]星际战争
Description \(3333\) 年,在银河系的某星球上, X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了 \(N\) 个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装 ...
- 【BZOJ3993】[SDOI2015]星际战争 二分+最大流
[BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- BZOJ 1305 dance跳舞(最大流+二分答案)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1305 解题思路: 转自:https://blog.csdn.net/u012288458 ...
- BZOJ2406矩阵——有上下界的可行流+二分答案
题目描述 输入 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出 第一行,输出最小的答案: 样例输入 2 2 0 1 2 1 0 1 样例输出 1 ...
- 【BZOJ3993】 星际战争
Time Limit: 1000 ms Memory Limit: 128 MB Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一 ...
- [SDOI2015]星际战争
题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...
最新文章
- 33.搜索插件——autocomplete
- 不错php文件缓存类,一个不错的PHP文件页面缓存类
- [scala-spark]6. 继承与特质trait
- 回调java 简书_web3j函数回调使用详解
- Linux与Windows中的UTC时间
- 7款最佳jQuery和JavaScript的PDF查看器插件
- ProtoBuf3语法指南(Protocol Buffers)_上
- vuex commit 模块_Vuex详细介绍
- HDR中HLG与PQ曲线的互转
- 计算机如何格式化和重装系统,怎样格式化c盘重新安装系统_重装系统时如何格式化C盘...
- 计算机主板复位电路的组成,主板复位电路图解 - 主板知识
- python 替换重复字符_python - 在Pandas中,如何将重复值替换为多个唯一字符串?_pandas_酷徒编程知识库...
- 人工蜂群算法求解TSP问题
- Android设置应用数字角标
- P1425 小鱼的游泳时间 题解
- window环境下thrift Compiler 编译步骤
- Windows10安装Centos7双系统
- 2.本地配置yum源
- XVID解码器不弹出status窗口的办法
- 大文件上传时如何做到秒传?(荣耀典藏版)