luogu P3324 [SDOI2015]星际战争
题面
https://www.luogu.org/problemnew/show/P3324
题解
水题。
二分答案+最大流判可行。
- 注意最大流解决伤血模型的运用。
// luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<cstring> #include<vector> #include<queue> #define ri register int #define N 505 #define INF 1000000007 #define T (n+m+1) #define eps 1e-5using namespace std;int n,m; vector<int> to,ed[N]; vector<double> w; int cur[N],d[N]; double sum; int g[N][N],a[N],b[N];inline int read() {int f=0,ret=0; char ch=getchar();while (ch<'0' || ch>'9') f|=(ch=='-'),ch=getchar();while (ch>='0'&&ch<='9') ret*=10,ret+=(ch-'0'),ch=getchar();return f?-ret:ret; }void add_edge(int u,int v,double w1,double w2) {to.push_back(v); w.push_back(w1); ed[u].push_back(to.size()-1);to.push_back(u); w.push_back(w2); ed[v].push_back(to.size()-1); }bool bfs() {queue<int> q;memset(d,0x3f,sizeof(d));d[0]=0; q.push(0);while (!q.empty()) {int x=q.front(); q.pop();for (ri i=0,l=ed[x].size();i<l;i++) {int e=ed[x][i];if (w[e]>eps && d[x]+1<d[to[e]]) {d[to[e]]=d[x]+1;q.push(to[e]);}}}return d[T]<=1000000; }double dfs(int x,double limit) {if (x==T || !limit) return limit;double tot=0;for (ri &i=cur[x];i<ed[x].size();i++) {int e=ed[x][i];if (d[to[e]]==d[x]+1 && w[e]>eps) {double f=dfs(to[e],min(limit,w[e]));if (f<eps) continue;w[e]-=f; w[1^e]+=f; tot+=f; limit-=f;if (limit<eps) return tot;}}return tot; }double dinic() {double ret=0;while (bfs()) {memset(cur,0,sizeof(cur));ret+=dfs(0,INF);}return ret; }bool check(double t) {w.clear(); to.clear();for (ri i=0;i<=n+m+1;i++) ed[i].clear();for (ri i=1;i<=m;i++) add_edge(0,i,t*b[i],0);for (ri i=1;i<=n;i++) add_edge(m+i,T,a[i],0);for (ri i=1;i<=m;i++)for (ri j=1;j<=n;j++) if (g[i][j]) add_edge(i,m+j,INF,0);if (dinic()+eps>sum) return 1; else return 0; }int main() {n=read(); m=read();for (ri i=1;i<=n;i++) a[i]=read();sum=0.0;for (ri i=1;i<=n;i++) sum+=a[i];for (ri i=1;i<=m;i++) b[i]=read();for (ri i=1;i<=m;i++)for (ri j=1;j<=n;j++) g[i][j]=read();double lb=0,rb=10007; double ans=-1;while (rb-lb>1e-4) {double mid=(lb+rb)/2;if (check(mid)) ans=mid,rb=mid; else lb=mid;}printf("%.4lf",ans);return 0; }
转载于:https://www.cnblogs.com/shxnb666/p/11104957.html
luogu P3324 [SDOI2015]星际战争相关推荐
- BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...
- P3324 [SDOI2015]星际战争
传送门:https://www.luogu.org/problemnew/show/P3324 首先瞅一眼数据范围,发现m, n都很小,所以就可以初步断定这是一道网络流的题. 因为题中说每一个武器只能 ...
- BZOJ3993: [SDOI2015]星际战争
BZOJ3993: [SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- 【BZOJ3993】[SDOI2015]星际战争 二分+最大流
[BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- [SDOI2015]星际战争
题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...
- bzoj3993 [SDOI2015]星际战争
Description \(3333\) 年,在银河系的某星球上, X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了 \(N\) 个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装 ...
- bzoj3993: [SDOI2015]星际战争(二分+最大流)
题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...
- bzoj3993 [SDOI2015]星际战争 二分答案+网络流检验
流量分配模型. 这个题如果时间不知道的话流量是未知的,对于流量未知的网络流肯定是没法做的(没有动态借流量的网络流) 由于时间上满足连续性,就可以二分答案,然后流量确定就可以跑网络流 主要还是化静为动 ...
- 【Luogu-P3324 [SDOI2015] / DSY-1993】星际战争
传送门:P3324 [SDOI2015]星际战争 二分 + 最大流 Solution\mathfrak{Solution}Solution 1 不可否认,看到题面的第一反应是构造二分图,让武器在一边, ...
- 星际战争2服务器维护,星际战争2初次反击虚空技能洗练技巧
<星际战争2初次反击>关于虚空的重要性不必多说了,这里主要讲一下虚空如何洗练技能比较好,下面一起来看看吧. 虚空在pvp站场上的重要性不亚于顶级的武器.好的虚空是你吊打高玩的必备之物.首先 ...
最新文章
- 观点 | 李飞飞最新访谈:我每天都在对AI的担忧中醒来
- C++ Primer 5th笔记(chap 11)关联容器
- BIEE建模参考规范
- 6 步搭建数据平台—从指标体系到相关技术 | 周四话数据
- 字符串匹配算法(BM)
- 公司的年度汇报怎么写 年底述职报告写法
- 【连载】如何掌握openGauss数据库核心技术?秘诀三:拿捏存储技术(1)
- 元月份退休能享受涨养老金的待遇吗?
- springboot shiro ajax,SpringBoot Shiro 登录成功后返回json数据 shiro使用ajax登录
- 【JUC】JDK1.8源码分析之ConcurrentSkipListMap(二)
- psenet的eval_ctw1500.py解析
- SQL SERVER 读取 XML 数据
- Servlet过滤器和监听器知识总结
- 过去的2017和已经到来的2018
- 并发编程学习之阻塞队列ArrayBlockingQueue
- 勒索病毒:解密工具整理
- 蓝桥杯2019B组 C++
- 飞鱼星流控王VF12路由器使用体验
- 计算机软件树状图,树状图怎么画|画树状图步骤
- 第七十三集 KVM虚拟化☜(゚ヮ゚☜)