正解:网络流+二分

解题报告:

传送门$QwQ$

其实我第一反应是费用流来着,,,但是仔细想了下发现我不会实现各个武器之间独立同时?而且攻击是连续的答案可能是小数嘛$QwQ$.

所以显然不是递推就二分呗$QwQ$.然后依然是因为小数的约束,所以最后选择的二分$QwQ$

$umm$然后就傻逼题了呗?

$check$的话直接武器建一排点机器人建一排点,$S$和武器$i$连$B_{i}\cdot time$,机器人$j$和$T$连$A_{i}$,然后武器和能攻击的机器人之间连$inf$,欧克做完辣!

$over$,感觉也没什么要注意的细节,那就放下代码就成$QwQ$

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define il inline
  4. #define lf double
  5. #define gc getchar()
  6. #define t(i) edge[i].to
  7. #define n(i) edge[i].nxt
  8. #define w(i) edge[i].wei
  9. #define ri register int
  10. #define rb register bool
  11. #define rc register char
  12. #define rp(i,x,y) for(ri i=x;i<=y;++i)
  13. #define e(i,x) for(ri i=head[x];~i;i=n(i))
  14.  
  15. const int N=+,M=;
  16. const lf eps=1e-,inf=1e9;
  17. int S,T,ed_cnt=-,head[N],cur[N],a[N],b[N],dep[N],m,n;
  18. bool d[M][M];
  19. lf l,r=1e6,sum;
  20. struct ed{int to,nxt;lf wei;}edge[N<<];
  21.  
  22. il int read()
  23. {
  24. rc ch=gc;ri x=;rb y=;
  25. while(ch!='-' && (ch>'' || ch<''))ch=gc;
  26. if(ch=='-')ch=gc,y=;
  27. while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
  28. return y?x:-x;
  29. }
  30. il void ad(ri x,ri y,lf z)
  31. {edge[++ed_cnt]=(ed){x,head[y],z};head[y]=ed_cnt;edge[++ed_cnt]=(ed){y,head[x],(lf)};head[x]=ed_cnt;}
  32. il bool bfs()
  33. {
  34. queue<int>Q;Q.push(S);memset(dep,,sizeof(dep));dep[S]=;
  35. while(!Q.empty()){ri nw=Q.front();Q.pop();e(i,nw)if(w(i)-eps> && !dep[t(i)])dep[t(i)]=dep[nw]+,Q.push(t(i));}
  36. return dep[T];
  37. }
  38. il lf dfs(ri nw,lf flow)
  39. {
  40. if(nw==T || !flow)return flow;lf ret=;
  41. for(ri &i=cur[nw];~i;i=n(i))
  42. if(w(i) && dep[t(i)]==dep[nw]+)
  43. {lf tmp=dfs(t(i),min(flow,w(i)));ret+=tmp,w(i)-=tmp;w(i^)+=tmp,flow-=tmp;}
  44. return ret;
  45. }
  46. il lf dinic(){lf ret=;while(bfs()){rp(i,S,T)cur[i]=head[i];while(lf d=dfs(S,inf))ret+=d;}return ret;}
  47. il bool check(lf tim)
  48. {
  49. ed_cnt=-;memset(head,-,sizeof(head));
  50. rp(i,,m)rp(j,,n)if(d[i][j])ad(j+m,i,inf);
  51. rp(i,,n)ad(T,i+m,a[i]);rp(i,,m)ad(i,S,b[i]*tim);
  52. //printf("dinic=%.6lf sum=%.1lf\n",dinic(),sum);
  53. return dinic()<sum;
  54. }
  55.  
  56. int main()
  57. {
  58. //freopen("3324.in","r",stdin);freopen("3324.out","w",stdout);
  59. n=read();m=read();S=;T=n+m+;rp(i,,n)sum+=a[i]=read();rp(i,,m)b[i]=read();rp(i,,m)rp(j,,n)d[i][j]=read();
  60. while(r-l>eps){lf mid=(l+r)/;if(check(mid))l=mid;else r=mid;}printf("%.6lf\n",r);
  61. //printf("%d",check(82));
  62. //check(82);
  63. return ;
  64. }

洛谷$P3324\ [SDOI2015]$星际战争 网络流+二分的更多相关文章

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

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

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

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

  3. BZOJ 3993 [SDOI2015]星际战争 | 网络流 二分答案

    链接 BZOJ 3993 题解 这道题挺棵的-- 二分答案t,然后源点向武器连t * b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行. #inc ...

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

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

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

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

  6. BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)

    字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...

  7. BZOJ3993 [SDOI2015]星际战争 【二分 + 网络流】

    题目 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到 ...

  8. P3324 [SDOI2015]星际战争

    传送门:https://www.luogu.org/problemnew/show/P3324 首先瞅一眼数据范围,发现m, n都很小,所以就可以初步断定这是一道网络流的题. 因为题中说每一个武器只能 ...

  9. Luogu P3324 [SDOI2015]星际战争

    二分+最大流 首先考虑二分答案 然后可以发现对于已知时间,判断是否可以将所有机器人摧毁可以用网络流 建立源点和汇点,源点向每一个激光武器连一条容量为$time*b[i]$的边,表示该激光武器在$tim ...

随机推荐

  1. 走近科学,探究阿里闲鱼团队通过数据提升Flutter体验的真相

    背景 闲鱼客户端的flutter页面已经服务上亿级用户,这个时候Flutter页面的用户体验尤其重要,完善Flutter性能稳定性监控体系,可以及早发现线上性能问题,也可以作为用户体验提升的衡量标准. ...

  2. Android中使用Apache common ftp进行下载文件

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/birdsaction/article/details/36379201 在Android使用ftp下 ...

  3. @atcoder - Japanese Student Championship 2019 Qualification - E@ Card Collector

    目录 @description@ @solution@ @accepted code@ @details@ @description@ N 个卡片放在 H*W 的方格图上,第 i 张卡片的权值为 Ai ...

  4. 在phpstudy中nginx伪静态配置

    ########################### #以下是虚拟主机配置 server { listen 80; server_name hzym.com; root "D:\phpst ...

  5. BERT大火却不懂Transformer?读这一篇就够了

    https://zhuanlan.zhihu.com/p/54356280 大数据文摘与百度NLP联合出品 编译:张驰.毅航.Conrad.龙心尘 来源:https://jalammar.github ...

  6. 从浏览器的url中获取查询字符串的参数

    正则表达式: function getQuery(name){ var reg = new RegExp("(^|&)" + name + "=([^&] ...

  7. 条件随机场(CRF) - 2 - 定义和形式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xueyingxue001/article/details/51498968声明: 1,本篇为个人对& ...

  8. java 静态导入(1.5特性,好处是不用写类名)

    import语句可以导入一个类或某个包中的所有类 import static语句导入一个类中的某个静态方法或所有静态方法 语法举例: import static java.lang.Math.sin; ...

  9. 用Xshell连接谷歌云

    谷歌云服务器,默认用浏览器进行SSH链接,而且也不告知密码.以Centos为例,先使用浏览器连接 1,给root修改密码 1 sudo passwd root 2,编辑ssh配置文件 sudo nan ...

  10. Jenkins 配置自动合并 release 分支到 master 分支

    本文告诉大家如何在 Jenkins 配置合并到 release 的内容自动合并到 gitlab 的 master 分支 首先需要两个仓库,一个是 gitlab 的仓库,另一个是 Jenkins 的仓库 ...