前言

不断更新中…
专题的(下)篇将介绍网络流的一些奇奇怪怪的应用和费用流有关的一些套路。

本专题暂时包含三道题:

洛谷P1251 餐巾计划问题: 费用流的基本应用
Trade Gym - 100212I: 使用网络流对图论中的边进行调整
codeforces 818G - Four Melodies: 费用流压缩建图


洛谷P1251餐巾计划问题

题意

见题目链接

题解

这道题我们把选取一张餐巾纸当作是一个单位的流量,那么显然来源部不同的餐巾纸,他们的费用是不相同的,这就引出了费用流(最小费用最大流)的模型。

一天可以在早上接受r[i]r[i]r[i]数量的餐巾纸,同时也可以将r[i]r[i]r[i]数量的餐巾纸送去清洗,所以我们需要将每一天拆成两个点,分别表示需要餐巾纸的点送走餐巾纸的点

需要餐巾纸的点与汇点TTT连边,容量为r[i]" role="presentation" style="position: relative;">r[i]r[i]r[i],费用为000。还要和源点S" role="presentation" style="position: relative;">SSS连边,容量为r[i]r[i]r[i],费用为ppp,这代表购买新的餐巾纸的方式。
送走餐巾纸的点需要和两个点进行连边:

  • 送去慢洗,则需要和n" role="presentation" style="position: relative;">nnn天以后的需求点连边,容量为infinfinf,费用为慢洗一条的费用。

    • 送去快洗,则需要和mmm天以后的需求点连边,容量为inf" role="presentation" style="position: relative;">infinfinf,费用为快洗一条的费用。
    • 注意,由于一条餐巾纸洗完了可以存放任意时间,所以我们需要在相邻需求点之间连立一条费用为000,容量为inf" role="presentation" style="position: relative;">infinfinf的边,代表的含义就是餐巾纸在存放。

      如图所示:

      优化:由于BBB累点之间有边相连,表示餐巾纸可以存放到下一天,那么,我们可以把S−>B" role="presentation" style="position: relative;">S−>BS−>BS->B的边省略掉,只保留S−>1BS−>1BS->1B这条边,表示所有新购买的餐巾纸都在第一天买好,然后存放到需要的那一天再使用。

      优化图如下:

      这样建图完成以后,跑一个最小费用最大流就可以了。
      注意:请检查你的板子速度是否可行,我的板子速度就太慢了,zkw费用流模板了解一下。

      参考代码 略


      Trade Gym - 100212I

      题意

      给出A、B两个点集,A、B之间有边相连,而A和B的内部均无边相连。
      题目要求求出最多删除A、B之间的多少边,才能使得A中点的度数至少都为2,B中点的度数也至少都为2。

      题解

      先求出每个点的度数,从每个点v出发,最多能删除deg[v]−2deg[v]−2deg[v]-2条边(注意这里是理想情况下,不一定能删除这么多)。
      那么我们就可以建立一个超级源点SSS和超级汇点T" role="presentation" style="position: relative;">TTT,从SSS往A" role="presentation" style="position: relative;">AAA点集连边,边的容量为deg[v]−2deg[v]−2deg[v]-2,从BBB点集往T" role="presentation" style="position: relative;">TTT点连边,边的容量为deg[u]−2deg[u]−2deg[u]-2
      AAA和B" role="presentation" style="position: relative;">BBB之间的边流量全为111。
      从S" role="presentation" style="position: relative;">SSS点流到TTT的每一个为1" role="presentation" style="position: relative;">111的流量,都相当于在原图里面删除了这条边。
      跑一边最大流,就可以得到最多能删除多少边了。在残余网络中做一些小操作就可以把剩余的边输出出来。
      网络图如下:

      总结

      网络流可以用于对图论中的边进行调整,当图论中的一条边存在流量流过的时候,代表该边被“调整”了,调整可以具有很多含义,比如本题中的“删除”也算“调整”。

      参考代码 略


      Four Melodies

      题意

      题目链接

      给出nnn个数,输出选四个不相交的melody的所有情况中,4个melody长度总和的最大值。

      要形成Melody,要求相邻的数字要么相差1" role="presentation" style="position: relative;">111,要么相差777的倍数。

      题解

      一种很直观的建图方法就是把每个数字拆成2个点in" role="presentation" style="position: relative;">ininin和outoutout,然后源点也拆成2个点sss和s′" role="presentation" style="position: relative;">s′s′s',并把s′s′s'作为费用流的源点。

      从s′−>ss′−>ss'->s建立一条容量为444费用为0" role="presentation" style="position: relative;">000的边。然后从sss点向每个in" role="presentation" style="position: relative;">ininin建立一条容量为111,费用为0" role="presentation" style="position: relative;">000的边。

      再从ininin向outoutout建立一条容量为111,费用为−1" role="presentation" style="position: relative;">−1−1-1的边。从outoutout向汇点ttt建立一条容量为1" role="presentation" style="position: relative;">111,费用为000的边。

      然后对于任意两个node.i,j" role="presentation" style="position: relative;">node.i,jnode.i,jnode. i,j如果iii到j" role="presentation" style="position: relative;">jjj符合相邻的222个条件,那么就从i的out" role="presentation" style="position: relative;">outoutout点向j的ininin点连接一条容量为111费用为0" role="presentation" style="position: relative;">000的边,表示他们可以串起来。

      这样的话,建图的复杂度为O(n2)O(n2)O(n^2),边的个数也为O(n2)O(n2)O(n^2),复杂度太高了,因此需要压缩建图。

      奇技淫巧:当你找不到任何优化的点的时候,可以考虑搞一个出错率极小的做法,有一个想法就是每个点仅向后面50个点连边。

      怎么压缩建图呢?

      把每个点都扩充成3个点in,mid,outin,mid,outin,mid,out,其中ininin往midmidmid 连边容量为111,费用为−1" role="presentation" style="position: relative;">−1−1-1,midmidmid往outoutout连边,容量为111,费用为0" role="presentation" style="position: relative;">000。

      从ininin往outoutout连边容量为infinfinf,费用为000,表示途径这个点。

      关键的一步来了:
      从i这个点往后找第一个使得val[i]=val[j]+1" role="presentation" style="position: relative;">val[i]=val[j]+1val[i]=val[j]+1val[i] = val[j]+1的点jjj,从i.out" role="presentation" style="position: relative;">i.outi.outi.out向j.inj.inj.in连接一条容量为111,费用为0" role="presentation" style="position: relative;">000的边。
      从iii这个点往后找第一个使得val[i]=val[j]−1" role="presentation" style="position: relative;">val[i]=val[j]−1val[i]=val[j]−1val[i] = val[j]-1的点jjj,从i.out" role="presentation" style="position: relative;">i.outi.outi.out向j.inj.inj.in连接一条容量为111,费用为0" role="presentation" style="position: relative;">000的边。
      从i这个点往后找第一个使得(val[i]−val[j])%7==0(val[i]−val[j])%7==0(val[i] - val[j])\%7 == 0 的点jjj,从i.out" role="presentation" style="position: relative;">i.outi.outi.out向j.inj.inj.in连接一条容量为111,费用为0" role="presentation" style="position: relative;">000的边。
      这样的话,图就算压缩完成了(不需要两两比较建图)。
      图举例:

网络流及建模专题(下)相关推荐

  1. 网络流及建模专题(上)

    前言 不断更新中-- 这几天新坑填不下去了,回来回顾一些经典的模型套路,先拿网络流开刀,窃以为洛谷这几道网络流的题目还是非常具有代表性的,涵盖了网络流调整.多解计数.最小割.最大权闭合子图问题. 还涵 ...

  2. 网络流的建模方法总结

    文章持续更新(咕咕咕 ) 在网络流的题目中,建模一定是题目中的重点+难点, 下面总结一些网络流的建模套路 一,最基础的建模:两种方案如何决策 例题:p1402 https://www.luogu.or ...

  3. 瘟疫模拟——群体建模专题设计第一阶段

    瘟疫模拟--群体建模专题设计 主题 "瘟疫"主题的群体行为建模 第一阶段 技术预演与方案设计 新型冠状肺炎特征 关于新冠肺炎的一切 (回形针科普视频): 新型冠状病毒的受体和SAR ...

  4. 重建大师6.0多源通吃!卫星建模、下视影像三维建模、点云融合建模...

    当前,实景三维中国建设向深水区迈进,大范围.高效率.多数据源的实景三维数据生产将成为发展趋势. 为进一步响应自然资源部国土测绘司编制的<城市三维模型快速构建工作方案(征求意见稿)>,大势智 ...

  5. 二十四、Python数据建模(下),禁止转载

    @Author : By Runsen @Date : 2020/5/14 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  6. Scrapy抓站:大批量下载360指定专题下的照片并保存到sql和本地文件夹下

    目标网站:http://images.so.com/ (摄影专栏) Scrapy抓站:360照片 1. 新建项目 2. 新建Spider 3. 分析目标网站的种种 4. 构造请求 5. 定义提取信息的 ...

  7. Python实现3D建模工具(下)

    用户接口 我们希望与场景实现两种交互,一种是你可以操纵场景从而能够从不同的角度观察模型,一种是你拥有添加与操作修改模型对象的能力.为了实现交互,我们需要得到键盘与鼠标的输入,GLUT允许我们在键盘或鼠 ...

  8. BZOJ 3698(XWW的难题-上下界网络流+经典建模)

    Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N* ...

  9. 3dmax建模模式下的选择--循环选择

    无论通过哪种模式建模,面片建模,多边形建模,或者是样条线绘制建模,我们都必须能够很好的对操作对象进行选择,而且是准确高效的选择,那么选择的方法和手段就是我们必须掌握的建模技能.这里我们重点介绍一下循环 ...

最新文章

  1. 安卓4安装Linux,如何在 Android 手机上安装 Ubuntu 13.04
  2. Schedule Problem spfa 差分约束
  3. 多少行数_经验丰富的程序员和其每日代码行数
  4. JavaScript实现四则运算
  5. python弹出窗口 闪烁_Python。得到闪烁/闪烁的窗口
  6. 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...
  7. centos6配置mysql远程访问_mysql设置密码远程访问编码格式
  8. 【Spring】学习SpringAOP
  9. 忘记root密码,使用救援模式,grup设置密码
  10. curl 断点下载 wget下载
  11. mysql中str_to_date函数和date_format函数和now函数
  12. 关于apapche aurora rpm包
  13. python工程师认证证书报考条件_Python工程师需要具备什么条件
  14. java 字符串掐头去尾_Java 8 Stream 简单介绍
  15. 关于宏基暗影骑士擎笔记本如何关闭触摸板的问题记录
  16. View的实现和优化相关面试题
  17. C# Winform Panel 内控件大小不随Panel大小改变设置
  18. OracleP6机场工程进度控制系列10:总进度计划编制基础
  19. stm32f103rbt6_5
  20. python程序爬电影_Python爬取电影天堂最新发布影片消息

热门文章

  1. python导入文件列行_python读写csv文件并增加行列的实例代码
  2. 自定义依赖注解无效_最详细的自定义Spring Boot Starter开发教程
  3. 对象数组参数_【JavaScript 教程】标准库—Array 对象
  4. leetcode309. 最佳买卖股票时机含冷冻期
  5. [Java基础]System类的常用方法
  6. [MySQL基础]MySQL语法规范介绍
  7. [Qt入门]模态和非模态对话框创建
  8. 计算机连接拒绝访问,Win10系统下Windows无法连接到打印机,拒绝访问的解决办法...
  9. java8 stream 最大值_JDK8-Stream流常用方法
  10. 蓝桥杯 平面切分(欧拉定理)