zoukankan      html  css  js  c++  java
  • 【网络流24题】23题分享,短暂出坑!

    今天早上终于把一直卡着的那道整完了,心情舒畅。但是马上就发现还有好些东西没学。了一上午splay和treap博客的草稿了,趁热写下网络流的博客好了,就当换个脑子。

     为什么是23呢?因为机器人路径规划问题我不会啊嘿嘿。

    Pt.1 关键词统计

    好像没什么用,但是这些东西还是和网络流有点联系的好

    最多 最大 最长 最小 最少(短)

    数量 收益 长度 总和 花费 路线 耗时

    方案

    数据范围 10 20 100 500

     

    Pt.2 模型

    1) 二分图

    对应问题:最大匹配,最小点覆盖,最小边覆盖,最大独立集,最大权独立集

    ①:最大匹配(及多重匹配)的最大流模型

    对第一个集合中的元素向源点连边,容量为1

    对第二个集合中的元素向汇点连边,容量为1

    对于两个集合中相连的点连边(S1->S2),容量为1

    求最大流。正确性如下

    此外,使用dinic,EK算法还可以利用残量网络的特点求出具体哪些边是匹配边和其端点,解决了输出方案的问题

     

      1.飞行员配对方案问题 

    本题是一个非常明显的二分图模型,求最大匹配并且输出方案。

    输出方案时,判断残量网络中所有正向边流量为0或判断反向边流量为1表明在最终方案中这条边是匹配边。

     

      5.圆桌问题 

    【多重匹配】

    从源点向国家连容量为国家代表数的边,国家和桌子间连容量为1的边,桌子到汇点连容量为桌子人数的边。求最大流。

     

      7.试题库问题

    同上

     

      18.分配问题【费用流出现了QAQ】

    不考虑效率人和工作的关系是一张二分图,并且题目保证存在一个完美匹配(所有的活都有人干)。加上效率,求的就是所有活都有人做的时候(最大流哇)最大的效率,即最大费用最大流。

     

    ②:最小点覆盖的最大流模型

    最小点覆盖是一个覆盖了所有的边的点集

    最小点覆盖=最大匹配数

    证明:反证法,用上面那张图。

    匹配边的端点至少有一个端点连接非匹配边。

    如果存在一条非匹配边边不被匹配边的端点覆盖,这条边就是匹配边,因为其端点还为被匹配。

    所以匹配边的端点集是一个点覆盖集(匹配数*2),同时两条匹配边的端点如果是一条非匹配边的端点,那么只需要其中一个端点就能覆盖。所以所有匹配边的的一个端点组成最小点覆盖集,大小为匹配数(最大匹配数)。

     

    诶,24题中好像没有这类题,下一个下一个。

     

    :最大独立集/最大权独立集

    独立集是一个点集,所有的点都不相连。

    最大独立集=点数-最小点覆盖=点数-最大匹配数

    最大权独立集=点权和-最小割容量=点权和-最大流(这个暂时我没有想出来证明,胡伯涛前辈的论文中有详细介绍)

     

      24.骑士共存问题

    自习读题后发现棋盘上的黑白格不能共存,他们是否满足二分图的性质呢?答案是肯定的。那么我们要求的就是互不相邻的最大骑士个数,即最大独立集。

     

      9.方格取数问题

    发现了么,二分图的模型。还是黑白格,但是有了权值,求最小割(最大流),利用上面的结论。

     

    2) 标准的费用流模型

    值得注意的是,EK+spfa/EK+dijkstra中的费用是单位费用,切勿在建模时和边权混淆。

     

      10.餐巾计划问题

    模型很明显,为了区分用过的餐巾和干净餐巾,我们把每一天拆开,入点<x,i>接受干净餐巾,出点<y,i>接受<x,i>和其他来源的用过的餐巾。再额外建立快慢洗店。求最小费用最大流。

     

      17.运输问题

    模型非常明显,不多言。

     

      19.负载平衡问题

    环?没法贪心呀。如果知道这题网络流可做,模型非常容易建立(问题是考试时候我怎么知道)。

       20.深海机器人问题 & 23.火星探险问题

    按照题目要求建好图,跑就行了,嘿嘿嘿。

     

    3) 隐藏的模型(好题好题)

    【最大流】

      6.最长递增子序列问题

    3个子任务,Task1没啥问题,Task2怎么做呢?

    Task1在DP完了之后,数组f中存在一些重要信息,这些信息中存在f的转移关系。F[i]=maxlen从f[j]=maxlen-1转移来,f[j]=maxlen-2从f[k]=maxlen-3转移来...f[x]=1。如果我们把这个关系拎出来,就找到了一个最长上升子序列,如果可以拎出来更多组关系,就找到了其他的子序列。从f[i]=1传递到f[j]=maxlen,这些关系恰构成一个网络,其中的最大不相交路径条数就是子序列个数,其最大流就是子序列个数。

     

      11.航空路线问题

    题意求最大环。So?真的是网络流吗?起点到终点存在一条路径时就有解。设立源点连到起点,汇点到终点,容量均为2。城市间连边,容量为1。跑最大费用最大流。流量为0无解,1有去无回,除法起点知道直连,2输出方案。

     

      16.数字梯形问题

    诶?这个图有点像上面最长递增子序列问题?没错,又是一道不相交路径,不过有了权值。

       21.最长k可重区间集问题 & 22.最长k可重线段集问题

    终于到了24题中非常喜欢的几道了!

    这道题怎么读,和网络流有个啥关系???我2^n枚举集合?解析几何?

    操作了一波发现没什么好方法啊?网络流!

    这个k,好k哇。想想最后那个k可重集的组成,一定是不超过k个不重集构成,nice!有点头绪了,不重集...不重集...不相交...不相交路径???喔,有点东西了。

    区间集是这样吧

    我们把不相加的连起来,诶!

    跑最大流即可。

    线段集的坑点:垂直!

     

    4) DAG的最小路径覆盖 & 2道妙题

    最小路径覆盖=点数-最大匹配数

    这个东西,呃怎么证啊...

      3.最小路径覆盖问题

    题如其名,最大流,结论求解。

      4.魔术球问题

    非常棒的一道题。有一种非常厉害的贪心解法,可惜我想不到。

    其次这道题连个图都没有!我们再动手。...好像不太好画啊。

    我们发现,每增加1个球结果可能会改变上一次的球的结构,增加新的柱子。除非我们知道答案,否则是无法决定下一步加什么球的。数字和数字间连边,数字和柱子间连边,每根柱子上的球不能重复,有感觉了吗?n根柱子不是n条不相交路径吗?反过来问你最大点数。所以先确定枚举点数,确定点数后,再跑最大流求最小路径覆盖,和n比较,直到最大流超过n,此时得到了答案。

     

      2.太空飞行计划问题

    再次推荐胡伯涛前辈的论文,该题模型为最大权闭合子图,求最小割,答案为总和-最小割容量。

     

      13.星际转移问题

    卡我最久的一道,首先这个图怎么建我想了快一周!最后还是看的题解。

    因为每一天飞船的位置都在变化,边是变化着的,运用一个分层图的思想可以让事情变得明了:

     

    枚举天数,每增加一天就增加一层图,看看最大流有没有超过人数,超过了就输出天数。

    5) 披着狼皮的羊

    以下几道题网络流都不是最优解法(虽然以上也有些是)

    其名曰:分层图最短路。

    当我们发现地图不停变化时,不妨按照某个状态划分出若干个地图,在其中解决问题,这个时候费用流和最短路相比就显得相形见绌了。(推荐肖天前辈2004的论文)

      12.软件补丁问题

      14.孤岛营救问题

      15.汽车加油行驶问题

    这三道题数据范围都较小,对于12.中的软件修复状态,14.中的钥匙状态,15.中的行驶里程都可以用二进制数存储,然后在n^2*(1<<k)的图中求最短路。

     

    最后感谢byvoid前辈的题解及数据,洛谷的部分题解,和几位前辈的论文。

    若发现本博客有何错误或不妥,请指出。

    转载请注明出处。

  • 相关阅读:
    APICloud联合腾讯云推出“云主机解决方案“,各种福利等你拿
    WiFi模块Demo(新手教程)图文详解模块使用教程
    移动APP 微信支付完整过程(wxPay 方案一)
    APICloud开发者进阶之路 | txLive模块(直播类)试用分享
    解决R语言临时文件目录的问题(tempdir、tempfile)
    CentOS下SparkR安装部署:hadoop2.7.3+spark2.0.0+scale2.11.8+hive2.1.0
    Extending sparklyr to Compute Cost for K-means on YARN Cluster with Spark ML Library
    Running R jobs quickly on many machines(转)
    R语言快速深度学习进行回归预测(转)
    sparklyr包:实现Spark与R的接口
  • 原文地址:https://www.cnblogs.com/opethrax/p/10289205.html
Copyright © 2011-2022 走看看