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

    本文目的是总结网络流的建模,所以Dinic 以及 Sap并不详讲。
    但是在选用哪种算法时往往参照边的多少
    Dinc O(m^2n)
    Dinic 分层图一般dinic比较快
    Sap O(m
    n^2)

    看到一道题目初步想到是网络流时
    先是判断是网络流的哪种类型
    1.最小割 使S不能到T 即x集合取xi 其所对应的y集合中的yj不能使用,二分图颇多。
    2.费用流 约束很多 简单的最大流不能满足约束时 清晰表达边和点时 则需要给边增加费用。
    3.最大流 和最小割类似 二分图居多,但性质不一样。
    4.分层图 做的蛮少 有的是求最短路径啊,有的看起来就像DP一样(DP值会反复更新跟求最短路的dist一样因此spfa转移)
    5.我还没学
    重点!!!!!!
    建图:
    关键字:点,边,流。
    首先掌握拆点
    拆点就是将一个点的意义用多个点表达,方便建图。我们所拆的点往往有这些性质。
    (1).限制经过或使用点的次数
    (2).一个点有多重属性 属性之间存在联系。例如网络流24题之餐巾计划 a[i]表示第i天要用的餐巾,b[i]表示第i天用完的餐巾,a[i]与a[i+1]和b[i]有联系,而b[i]与a[i+fast_time],a[i+slow_time]存在联系。如果不拆点,用多少条边都无法表达这些联系。
    例如:
    1.进入该点(x[i])和出去该点(y[i])
    这个点只被经过K次 add(x[i],y[i],k) (例题太多
    2.点的入度(x[i])和点的出度(y[i])
    If (map[i][j])add(y[i],x[j],1) (例题:hdu3488
    3.第1..k天的这个点
    分层图中使用 (例题:网络题24题之星际转移问题
    PS:缩点也很重要可以有效减少时间复杂度 其做法是将入度和出度一样的点变成同一点 例如hdu3605

    点:
    确定点是建图最难的地方。
    哪些点?这些点什么意义?这样的点可以能用边联系起来么?因为最难所以不讲方法,只讲例子(防误导2333333333333333333。
    Hdu3572:
    接触的第一个任务分配类题目
    有n个任务,m个机器,n个任务分别要求用pi个时间点,
    这些时间必须在 start[i]和end[i]之间,问是否能完成所有任务。
    一开始想的是n个任务代表n个点,m个机器代表m个点,
    搞了半天扯不到时间上去。
    正解是用n个任务和 max(end[i])个时间点,每个时间点最多做m个任务,随便建边即可,这题选点较难,但是做完后去做了hdu2883和hdu2732(怎么感觉选完点这个题目太裸了)。
    HDU3338:
    好题!
    干TM的脑洞题。
    N*N的棋盘上一些黑白格子,白格子必须填1..9中的数。要求连续的一些竖着的格子之和或横着的格子之和都为给定的值。看不懂看http://www.cnblogs.com/ylfdrib/archive/2010/08/15/1799903.html
    然后YY了一个晚上,连费用流都搞了就是搞不出来。
    题解:
    所有横着的白格子的数字总和=所有竖着的白格子的数字总和。
    S连某一行,容量为白格子的横和,竖行连T,容量为白格子的竖和。看到这里就恍然大悟。。。。(迷啊,选点难啊),不拓展了。
    HDU3488:
    每个点都必须只能在一个环上,求环上的边的权值和最大。
    分析题意,只在一个环上,所以每个点入度=出度=1,然后拆点乱搞(又是选点哈哈哈哈)。
    HDU4067:
    n个点,m条边,m条边连接u,v,选这条边用a费用,不选b费用,要求使除了给定的两个点 s和t以外所有的出度=入读,而s的入度比出度多1,t反之。
    好题,YY了半天我竟然YY出了给定出度入度求最小费用的做法。妈呀,看错题目,然后又搞了半天,死于s和t上。

    边:
    确定点的意义后要开始建边。边的容量费用都是考虑的重点。
    二分图独立集中,如果xi, yj存在冲突,则add(xi,yj,INF)。这样因为最小割必然不会割容量过大的边 而只会割 map[S,xi]or map[yj,T]。
    在任务分配类模型中,连接点与点之间的点边使用k次,则add(i,j,k)。
    费用流中 与S点和T点相连的点费用为0;
    拆边:例题hdu3667 没啥好讲的 因为费用=流量c边权s,在遇到费用=流量边权s^2的时候,则拆成s条边。

  • 相关阅读:
    VTemplate模板引擎的使用--入门篇
    VTemplate模板引擎的使用--进阶篇
    装载当前页面的模板文档
    学习平台判断是否是手机端
    畜禽免疫系统使用LODOP打印
    关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
    ConcurrentHashMap原理分析(1.7与1.8)
    Synchronized方法锁、对象锁、类锁区别
    谈谈线上CPU100%排查套路
    java-虚拟机-索引
  • 原文地址:https://www.cnblogs.com/wkingG/p/5110415.html
Copyright © 2011-2022 走看看