zoukankan      html  css  js  c++  java
  • 网络流总结

    联赛后按专题刷题,最近是网络流,感觉自己每到刷题时就会很慢,好在最近状态还可以。

    然而老夫思考一番决定还是放题解包吧,从题解中寻找思路。

    关于最大流:

    首先是一些比较基础的方法,如:拆点,先把总的贡献加上再尽量减小(把至少转化成最大)

    以及一些建图技巧:奇偶染色,按照某个限制进行拆点,动态加点等

    例题:

    蜥蜴(基础题,拆点限流

    星际战争(与二分结合

    奇怪的游戏(奇偶染色

    士兵占领(先加贡献,减最大流

     紧急疏散(按时间拆点

    个人理解:最大流的题难点其实在于建图方式,对转化题意方面要求不高

    关于最小割 :

    需要一定的转化题意的能力,

    首先是类似二分图,对两点间有限制的,如:二选一。可以用最小割解决

    其次是可以转化为最大权闭合子图的。

    技巧方面,注意数据范围如果很大看能不能转化为对偶图跑最短路

    例题:

    狼抓兔子&海拔(平面图转对偶图

    切糕(可以算是一类模型,用inf边去限制割的边的范围

    最大获利&植物大战僵尸&寿司餐厅&employ人员雇佣&线性代数(最大权闭合子图

    happiness(用最小割实现一个类似比较大小的过程

    另外:最小割树(这玩意我只会板子。。。

    个人理解:最小割在某些情况下可以理解为比较大小的过程。(好像就是最大权闭合子图

    另外:若可以导出“若i则j,所选权值最大”之类的东西,可以考虑最大权闭合子图

    关于费用流(只会spfa

    个人觉得从流和费用的实际意义出发考虑问题比较明白

    技巧方面,动态建点&边

    例题:

    修车&美食节&壕游戏:(拆点,动态建点&加边

    数字配对&千钧一发:(推式子,二分图黑白染色

    上下界网络流:

    无源汇可行流:是其他上下界的基础,一定要理解

    主要思想是先满足下限,然后根据每个点的流入流出量,新建超级源汇S,T。

    向原图中的点连接相应的必需权值的边。

    有源汇可行流:在无源汇的基础上,t先s连inf。同时根据实际含义,t向s连边的流量其实就是原图的可行流的流量。

    上下界费用流:这玩意其实特别好用,好多费用流的题,若对流量和费用都有限制,可以考虑大力上下界费用流,这样可以避免很多限制,如:星际竞速。

    然而还有一个技巧:对于某些上下界费用流的图,可以对每个点拆点,中间连接-inf的费用,最后再减去,这样就可以避免上下界网络流。

    所以好像上下界费用流也不咋地。。。

    例题:

    志愿者招募:按照实际意义分析,考虑对于每种志愿者新建一个点x,从结束日向x连边,从x向起始点连边,含义是有一股流从x出发从起点跑到终点最后在回到x(循环流)然后就可以跑无源汇费用流了,然后你发现新建的点只是作为一个中转站出现的,直接从结束点想起始点连边即可。

    旅行时的困惑:100000个点跑上下界???(打个贪心直接溜

    80人环游世界&星际竞速:裸的(可以点权-inf搞)

    个人理解:上下界网络流其实可以作为一种暴力,用规定上下界的方式对流量进行约束。

    upd:对于费用流,若一开始从源点到汇点没有负权边,即所有正的流量都对应正的花费,则可以在spfa中加一句:if(dis[u]>=dis[T])continue;,加上后跑得很快,但我不会证。。。

  • 相关阅读:
    python实现Socket通信原理
    SSL加密原理
    HackTheBox实战
    wireshark实战应用(长期更新,工作随笔)
    DNS域传输漏洞复现
    网站开发语言判断
    Linux:Day39(上) mysql基础
    Linux:Day38(下)
    Linux:Day38(上)
    Linux:Day37(上)
  • 原文地址:https://www.cnblogs.com/loadingkkk/p/12018520.html
Copyright © 2011-2022 走看看