zoukankan      html  css  js  c++  java
  • [学习笔记]上下界网络流

    有的时候,网络流建模要考虑某些边必须选择若干次,又不能多于若干次,而且不太容易转化成比较好的限制模型,

    就简单粗暴地给每条边定一个流量的上下界,求在满足上下界的基础上的一些问题。

    大概有以下几种。

    基本思路都是先满足下界,再调整流量守恒,一边满足最优性。

    无源汇上下界可行流

    每条边的流量有上下界
    问是否存在一种可行方案

    首先我们要保证每个点的流入流量等于流出流量
    如果存在一个可行流,那么一定满足每条边的流量都大于等于流量的下限.因此我们可以令每条边的流量等于流量下限,得到一个初始流,然后建出这个流的残量网络,每条边的流量等于上限减下限。
    但现在可能流量不是守恒的,让t[i]=流入量-流出量
    我们建出虚拟的源点和汇点,如果t[i]>0,源点向i连t[i]的边,否则i点向汇点连-t[i]的边,看是否满流即可

    注意,把下界干掉时,不是真的流过去,反向边不用动。因为这里不能反悔。

    有源汇上下界可行流

    T到S连一条inf的边e。然后同上。

    设e的最终流量是w,则原图的可行流就是w

    证明:

    S,T本身没有入边、出边,那么e的流量就是S流出的,流到T的流量。

    拆掉这个边,每个边流量加上下界

    由于剩下的图中,满足流量守恒和上下界,那么一定是一个合法的网络流流量分配,那么S流出的流量w就是总流量

    无源汇上下界最小费用可行流

    干掉下界的时候,把费用先计算上。

    把超级源超级汇求最大流的一步,换成最小费用最大流即可。

    即满足合法的前提下,最小化费用。

    费用就是之前的费用加上这次的费用。

    例题:[NOI2008]志愿者招募

    有源汇上下界最小费用可行流

    t到s是(inf,0)的边。

    同上。

    有源汇上下界(最小费用)最大流

    先求可行流

    现在流量已经守恒了。

    拆掉t到s的边

    残量网络上求s到t的最大流即可。

    因为最大流过程一定满足流量守恒,所以依然合法。所以求可行流的反向边流量可以保留,支持反悔。

    最大流=可行流+s到t的增加的最大流

    如果涉及最小费用,把所有的最大流换成最小费用最大流即可。

    记得统计三次费用。

    有源汇上下界(最小费用)最小流

    https://blog.csdn.net/Hanks_o/article/details/77995557

    两种方法。

    第一种:

    直接类比上面的 有源汇上下界(最小费用)最大流

    理解一下反边,就是反悔。

    t到s的最大流,就是s到t能减少的最多的流量。

    所以最后一步,求t到s的最大流。

    最小流=可行流-t到s的最大流。

    第二种:(并不如第一个好理解)

    类似 <有源汇上下界可行流> 的构图方法,但是不添加T到S的边,求一次超级源到超级汇的最大流。
    加边(T,S,0,+∞),在上一步残量网络基础上再求一次超级源到超级汇的最大流。
    流经T到S的边的流量就是最小流的值。


    该算法的思想是在第一步中尽可能填充循环流,以减小最小流的代价。

    第二步最大流为了保证合法性。

    其实相当于,第一步先占据一些循环流,然后再跑完第二个最大流之后,删掉t到s的边,对于一些第一步构成的循环流,删掉。

    观察现在实际的图流量分配,就是最小流了。

    例题: P4843 清理雪道

  • 相关阅读:
    nginx重启配置文件nginx.conf不成效
    nginx负载均衡简单配置
    linux下安装nginx
    一台服务器上部署多个tomcat
    tomcat三个端口作用
    tomcat三种部署方式
    查看端口占用, 杀掉
    java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    火狐浏览器发送post请求
    测试并发报错mysql: too many connections
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10132570.html
Copyright © 2011-2022 走看看