……没啥可说的。最大权闭合子图,跑下dinic就好了……

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 500000
  4. #define int long long
  5. #define INF 99999999999LL
  6. int n, sum, S, T, lev[maxn];
  7.  
  8. int read()
  9. {
  10. int x = , k = ;
  11. char c; c = getchar();
  12. while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
  13. while(c >= '' && c <= '') x = x * + c - '', c = getchar();
  14. return x * k;
  15. }
  16.  
  17. struct edge
  18. {
  19. int cnp, to[maxn], f[maxn], last[maxn], head[maxn], cur[maxn];
  20. edge() { cnp = ; }
  21. void add(int u, int v, int fl)
  22. {
  23. to[cnp] = v, f[cnp] = fl, last[cnp] = head[u], head[u] = cnp ++;
  24. to[cnp] = u, f[cnp] = , last[cnp] = head[v], head[v] = cnp ++;
  25. }
  26. }E1;
  27.  
  28. bool bfs()
  29. {
  30. memset(lev, , sizeof(lev));
  31. queue <int> q; q.push(S); lev[S] = ;
  32. while(!q.empty())
  33. {
  34. int u = q.front(); q.pop();
  35. for(int i = E1.head[u]; i; i = E1.last[i])
  36. {
  37. int v = E1.to[i];
  38. if(!lev[v] && E1.f[i])
  39. { lev[v] = lev[u] + ; q.push(v); }
  40. }
  41. if(lev[T]) return ;
  42. }
  43. return ;
  44. }
  45.  
  46. int dfs(int u, int nf)
  47. {
  48. if(u == T) return nf;
  49. int tf = ;
  50. for(int i = E1.cur[u]; i; i = E1.last[i])
  51. {
  52. int v = E1.to[i];
  53. if(lev[v] == lev[u] + && E1.f[i])
  54. {
  55. int af = dfs(v, min(nf, E1.f[i]));
  56. tf += af, nf -= af;
  57. E1.f[i] -= af, E1.f[i ^ ] += af;
  58. if(!nf) return tf;
  59. E1.cur[u] = i;
  60. }
  61. }
  62. return tf;
  63. }
  64.  
  65. int Dinic()
  66. {
  67. int ret = ;
  68. while(bfs())
  69. {
  70. memcpy(E1.cur, E1.head, sizeof(E1.head));
  71. ret += dfs(S, INF);
  72. }
  73. return ret;
  74. }
  75.  
  76. signed main()
  77. {
  78. n = read(); S = , T = n + ;
  79. for(int i = ; i <= n; i ++)
  80. {
  81. int x = read();
  82. if(x > ) sum += x, E1.add(i, T, x);
  83. else if(x <= ) E1.add(S, i, -x);
  84. }
  85. for(int i = ; i <= n; i ++)
  86. for(int j = ; i * j <= n; j ++)
  87. if(i * j <= n) E1.add(i, i * j, INF);
  88. printf("%lld\n", sum - Dinic());
  89. return ;
  90. }

【题解】Atcoder ARC#85 E-MUL的更多相关文章

  1. [题解] Atcoder ARC 142 D Deterministic Placing 结论,DP

    题目 (可能有点长,但是请耐心看完,个人认为比官方题解好懂:P) 首先需要注意,对于任意节点i上的一个棋子,如果在一种走法中它走到了节点j,另一种走法中它走到了节点k,那么这两种走法进行完后,棋子占据 ...

  2. [题解] Atcoder ARC 142 E Pairing Wizards 最小割

    题目 建图很妙,不会. 考虑每一对要求合法的巫师(x,y),他们两个的\(a\)必须都大于\(min(b_x,b_y)\).所以在输入的时候,如果\(a_x\)或者\(a_y\)小于\(min(b_x ...

  3. [题解] Atcoder Regular Contest ARC 147 A B C D E 题解

    点我看题 A - Max Mod Min 非常诈骗.一开始以为要观察什么神奇的性质,后来发现直接模拟就行了.可以证明总操作次数是\(O(nlog a_i)\)的.具体就是,每次操作都会有一个数a被b取 ...

  4. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  5. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  6. 【题解】Atcoder ARC#94 F-Normalization

    再次膜拜此强题!神级性质之不可能发现系列收藏++:首先,对于长度<=3的情况,我们采取爆搜答案(代码当中是打表).对于长度>=4的情况,则有如下几条玄妙的性质: 首先我们将 a, b, c ...

  7. [题解] Atcoder Regular Contest ARC 148 A B C E 题解

    点我看题 题目质量一言难尽(至少对我来说 所以我不写D的题解了 A - mod M 发现如果把M选成2,就可以把答案压到至多2.所以答案只能是1或2,只要判断答案能不能是1即可.如果答案是1,那么M必 ...

  8. [题解] Atcoder Regular Contest ARC 151 A B C D E 题解

    点我看题 昨天刚打的ARC,题目质量还是不错的. A - Equal Hamming Distances 对于一个位置i,如果\(S_i=T_i\),那么不管\(U\)的这个位置填什么,对到\(S\) ...

  9. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

随机推荐

  1. #define NULL ((void *)0)引起的风波

    1. 看下宏定义的结构体 typedef struct { ]; //CMEI/IMEI ]; //server ]; //CMEI/IMEI } Options; 2. 定义的NULL #defin ...

  2. golang 仿python pack/unpack

    写得不完善也不完美 尤其是高低位转换那(go和c 二进制高地位相反 需要转换,还有go int转[]byte长度是4位),希望牛人看后指导一下 项目需要通过socket调取 客户端是go ,服务器端是 ...

  3. 「日常训练」Kefa and Company(Codeforces Round #321 Div. 2 B)

    题意与分析(CodeForces 580B) \(n\)个人,告诉你\(n\)个人的工资,每个人还有一个权值.现在从这n个人中选出m个人,使得他们的权值之和最大,但是对于选中的人而言,其他被选中的人的 ...

  4. 「题目代码」P1049~P1053(Java)

    P1049 谭浩强C语言(第三版)习题6.5 import java.util.*; import java.io.*; import java.math.BigInteger; import jav ...

  5. 180626-Spring之借助Redis设计一个简单访问计数器

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/26/180626-Spring之借助Redis设计一个简单访问计数器/ Spring之借助Redis设 ...

  6. Python拼接字符串的7种方法

    1.直接通过+操作: s = 'Python'+','+'你好'+'!'print(s) 打印结果: Python,你好! 2.通过join()方法拼接: 将列表转换成字符串 strlist=['Py ...

  7. Linux命令应用大词典-第26章 模块和内核管理

    26.1 lsmod:显示内核中模块的状态 26.2 get_module:查看内核模块详细信息 26.3 modinfo:显示内核模块信息

  8. 第八模块:算法&设计模式、企业应用 第2章 企业应用工具学习

    第八模块:算法&设计模式.企业应用 第2章 企业应用工具学习

  9. TW实习日记:第19天

    今天一早上改完信息门户的代码之后,发现接口又出了问题,查了半天都不知道,原来又是网端的问题...真是心累啊,调整了一些细节样式,以及终于把企业微信的消息推送功能做完了.关键就在于有个表存放微信id的字 ...

  10. Vue 编程之路(三)—— Vue 中子组件在父组件的 v-for 循环里,父组件如何调取子组件的事件

    (标题的解决方案在第二部分) 最近公司的一个项目中使用 Vue 2.0 + element UI 实现一个后台管理系统的前端部分,属于商城类型. 一.前期思路: 其中在“所有订单”页面,UI 给的设计 ...