最大权闭合子图

1.每个区间收益(i,j)对应一个点 权值为正连S 负连T

2.每个区间收益向其子区间收益(i+1,j)与(i,j-1)对应的两个点连边 容量为INF

3.每个寿司类型对应一个点 连一条边到T 容量为m*w[i]*w[i]

4.每个寿司对应的区间收益点(i,i)连一条边到对应的寿司类型 容量为INF 再连一条边到T 容量为w[i]

最后跑最大流

  1. //Netflow dumpling
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. const int MAXN = ;
  5. const int MAXM = ;
  6. const int INF = ;
  7. int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << ], nxt[MAXM << ], f[MAXM << ], ed = , S, T;
  8. inline void addedge(int u, int v, int cap)
  9. {
  10. to[++ed] = v;
  11. nxt[ed] = Head[u];
  12. Head[u] = ed;
  13. f[ed] = cap;
  14. to[++ed] = u;
  15. nxt[ed] = Head[v];
  16. Head[v] = ed;
  17. f[ed] = ;
  18. return;
  19. }
  20. inline bool BFS()
  21. {
  22. int u;
  23. memset(lev, -, sizeof(lev));
  24. queue<int>q;
  25. lev[S] = ;
  26. q.push(S);
  27. while (q.size()) {
  28. u = q.front();
  29. q.pop();
  30. for (int i = Head[u]; i; i = nxt[i])
  31. if (f[i] && lev[to[i]] == -) {
  32. lev[to[i]] = lev[u] + ;
  33. q.push(to[i]);
  34. /*
  35. if (to[i] == T)
  36. {
  37. return 1;
  38. }
  39. magic one way optimize
  40. */
  41. }
  42. }
  43. memcpy(cur, Head, sizeof Head);
  44. return lev[T] != -;
  45. }
  46. inline int DFS(int u, int maxf)
  47. {
  48. if (u == T || !maxf) {
  49. return maxf;
  50. }
  51. int cnt = ;
  52. for (int &i = cur[u], tem; i; i = nxt[i])
  53. if (f[i] && lev[to[i]] == lev[u] + ) {
  54. tem = DFS(to[i], min(maxf, f[i]));
  55. maxf -= tem;
  56. f[i] -= tem;
  57. f[i ^ ] += tem;
  58. cnt += tem;
  59. if (!maxf) {
  60. break;
  61. }
  62. }
  63. if (!cnt) {
  64. lev[u] = -;
  65. }
  66. return cnt;
  67. }
  68. int Dinic()
  69. {
  70. int ans = ;
  71. while (BFS()) {
  72. ans += DFS(S, );
  73. }
  74. return ans;
  75. }
  76. void init(int SS, int TT)
  77. {
  78. memset(Head, , sizeof(Head));
  79. ed = ;
  80. S = SS;
  81. T = TT;
  82. return;
  83. }
  84. int n, m, now;
  85. bool ok[];
  86. int a[];
  87. int getid(int x, int y)
  88. {
  89. return + n * (x - ) + y;
  90. }
  91. int main()
  92. {
  93. int ans = ;
  94. scanf("%d %d", &n, &m);
  95. S = , T = n * n + ;
  96. for (int i = ; i <= n; i++) {
  97. scanf("%d", &a[i]);
  98. if (!ok[a[i]]) {
  99. addedge(a[i], T, m * a[i]*a[i]), ok[a[i]] = ;
  100. }
  101. addedge(getid(i, i), a[i], INF);
  102. addedge(getid(i, i), T, a[i]);
  103. }
  104. for (int i = ; i <= n; i++) {
  105. for (int j = i; j <= n; j++) {
  106. scanf("%d", &now);
  107. if (now > ) {
  108. addedge(S, getid(i, j), now);
  109. ans += now;
  110. } else {
  111. addedge(getid(i, j), T, -now);
  112. }
  113. if (i != j) {
  114. addedge(getid(i, j), getid(i + , j), INF);
  115. addedge(getid(i, j), getid(i, j - ), INF);
  116. }
  117. }
  118. }
  119. ans -= Dinic();
  120. printf("%d\n", ans);
  121. return ;
  122. }

BZOJ 4873 寿司餐厅 网络流的更多相关文章

  1. BZOJ 4873 寿司餐厅(最大权闭合图 网络流)

    寿司餐厅 时间限制: 1 Sec  内存限制: 512 MB提交: 6  解决: 3[提交][状态][讨论版] 题目描述 Kiana 最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序 ...

  2. BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图

    链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当 ...

  3. 洛谷$P3749$ [六省联考2017] 寿司餐厅 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 这道题好烦昂,,,就给了好多变量,,,但仔细读一遍题还是能$get$的所以我就不再提取一遍题目大意辣$QwQ$? 显然考虑建两排点,一排收益一排支出然后最小 ...

  4. [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅

    [LOJ 2146][BZOJ 4873][Shoi2017]寿司餐厅 题意 比较复杂放LOJ题面好了qaq... Kiana 最近喜欢到一家非常美味的寿司餐厅用餐. 每天晚上,这家餐厅都会按顺序提供 ...

  5. BZOJ:4873: [Shoi2017]寿司餐厅

    4873: [Shoi2017]寿司餐厅 首先很开心在膜你赛的时候做了出来. 看到数据范围,看到不能dp,看到贡献去重后计算,咦,流? 那就容易了,转最大权闭合子图,每个区间建一个点,取了就一定要取他 ...

  6. bzoj 4873: [Shoi2017]寿司餐厅 [最小割]

    4873: [Shoi2017]寿司餐厅 题意:略 唯一会做的... 一眼最小割 就是最大权闭合子图呀 \(s\rightarrow d_{positive} \rightarrow -d_{negt ...

  7. 【BZOJ】4873: [Shoi2017]寿司餐厅

    [题目]#2146. 「SHOI2017」寿司餐厅 [题意]给定n种寿司的代号,取区间[i,j]的寿司收益是d[i,j]和所有子区间的d,吃了c(c>0)种代号x的寿司的代价是mx^2+cx,给 ...

  8. 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)

    [BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...

  9. bzoj千题计划265:bzoj4873: [六省联考2017]寿司餐厅

    http://www.lydsy.com/JudgeOnline/problem.php?id=4873 选a必选b,a依赖于b 最大权闭合子图模型 构图: 1.源点 向 正美味度区间 连 流量为 美 ...

随机推荐

  1. 学习docker笔记1

    docker是一个能够把开发应用程序自动部署到容器的开源引擎 docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高 ...

  2. 人工智能_2_特征处理.py

    # 特征处理 # 特征预处理:通过统计方法将数据转换为算法需要的数据 # 数值型数据:标准缩放 # 规依法,标准化(常用,适用于当前大数据),缺失值处理(删除,填补中位数平均数,通常按照列填补) # ...

  3. golang web框架 beego 学习 (五) 配置文件

    app.conf: appname = gowebProject httpport = runmode = dev copyrequestbody = true [db] host= localhos ...

  4. leetcode834 Sum of Distances in Tree

    思路: 树形dp. 实现: class Solution { public: void dfs(int root, int p, vector<vector<int>>& ...

  5. 解决Windows7下virtualbox安装ubuntu出现的0x00000000指令引用0x00000000内存,该内存不能为written问题

    公司电脑只能用Windows7,不能用10,也没WSL用,最近想跑个Linux环境,因为之前装docker toolbox装了virtualbox,没道理再装vmware,遂用vbox开始折腾,没想到 ...

  6. javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())

    javascript 数组和对象的浅度复制和深度复制在平常我们用 ‘=’来用一个变量引用一个数组或对象,这里是‘引用’而不是复制下面我们看一个例子引用和复制是什么概念 var arr=[1,2,3,' ...

  7. 乐字节Java构造器(构造方法|构造函数)、方法与内存分析

    一. 构造器(构造方法|构造函数) 在创建对象时(new),必会调用一个特殊的方法,这个方法是初始化对象信息的为new服务的.这个方法称为“构造器” 使用 new + 构造方法创建一个新的对象. 构造 ...

  8. pgsql常用操作

    pgsql备份: --进入pgsql容器docker exec -it 容器ID bash --备份pgsql /opt/rh/rh-postgresql95/root/usr/bin/pg_dump ...

  9. TypeScript 枚举

    我们常常会有这样的场景,比如与后端开发约定订单的状态开始是0,未结账是1,运输中是2,运输完成是3,已收货是4.这样的纯数字会使得代码缺乏可读性.枚举就用于这样的场景.枚举可以让我们定义一些名字有意义 ...

  10. 20191011-构建我们公司自己的自动化接口测试框架-Util的读取excel常用方法模块

    包括获取excel的sheet名字,设定excel的sheet,读excel,写excel等常规操作. from openpyxl import Workbook from openpyxl impo ...