zoukankan      html  css  js  c++  java
  • 网络流杂题 三

    A. 1565: 植物大战僵尸

    考虑保护关系可能会出环,也就是其中任何一个一定不能被选。

    注意环的出边也是无法被选的。

    注意要找的环的出边并不是网络流建的图的出边,因为网络流反映的是必须选的关系,即由被保护者到保护者。

    然后就是简单的最大权闭合子图。

    B. 寿司餐厅

    似乎并不是很难,但是没有想到。

    考虑每次取出$(l,r)$,那么一定要取出$(l,r)$的任意一个子集。

    简单的建边方法是建边$(l,r)->(l,r-1)$ $(l,r)->(l+1,r)$。

    然后发现一个比较难搞的内容是统计选的花费,似乎可以简单转化为选$(x,x)$,必须选它后面代表花费的节点。

    因为每次选第一个的花费不同,所以再连出一条$inf$边表示选第一个的花费,选的花费为差量就好了。

    C. 51nod 1551 集合交易

    因为保证任意$k$个集合的并集大于等于$k$,那么由

    Hall定理的推论:

    假设两边的点集分别为X,Y(假设|X|<=|Y|),

    则二分图的最大匹配数为|X|−max{|W|−|N(W)|},其中W是X的子集

    可得原图存在一个完美匹配。

    那么每个集合可以找到它所对应的代表元素。

    当选出$k$个集合时,因为其中每个集合对应着互不相同的代表元素,已经到达了$k$个的限制。

    所以不能再有任意一个选择的集合含有的元素没有被选。

    那么当选择一个集合时,它的每个元素所对应的集合都应该被选。

    D. 2406: 矩阵

    考虑检验答案小于等于$k$是否是可行的。

    将行列分别放在二分图的左右部,分别向$s$ $t$连边。

    行列之间连边对应所在格子,流量任意。

    流量$1$对应着 源-行-列-汇 ,即一个格子对所在行列之和分别作出$1$的贡献。

    于是行列之和通过上下界限制。

    二分然后检验在该上下界意义下是否存在可行流就好了。

    E. 支线剧情

    上下界最小费用可行流。

    $spfa$不断找最短路补流,然后就完事了。

    按照我原来的理解这样并不合理:当$s$到$t$之间存在一条流量为负的增广路,可以在满足上下界的前提下使得费用更小。

    然而$yxs$大神指出了这样的情况并不存在:因为$t$到$s$之间存在一个$0$费用边,如果存在流量为负的增广路,出负环$spfa$必死。

    F. 1061: 志愿者招募

    难点在于如何想到无源汇。

    想到之后就没了,串联表示人员可以继承,通过上下界限制流量。

    在起点,终点,每个员工的新建点之间建出一个环,然后跑无源汇上下界最小费用可行流就好了。

    G. 旅行时的困惑

    上下界最小可行流。

    H. 清理雪道

    上下界最小可行流。

    在有源汇可行流的基础上,一个做法是:

    取出t->s边的流量,即可行流中s到t的流量,表示已经流的流量。

    删掉t->s这条边。

    考虑在残量网络上t到s的流,对应着s到t的退流。

    给该流量减去t到s的最大流,表示尽量大退流。

    另一个做法是:

    先不建t->s这条边,尽量补流,此时并不一定能跑满流。

    之后建出t->这条边,在残量网络上仍能增广出的流量,是在尽量不走t->s这条边前提下的,即最小可行流。

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/skyh/p/12008906.html
Copyright © 2011-2022 走看看