首页 > 代码库 > 网络流建图
网络流建图
最大流问题变形:
多汇点多源点:
加一个超级源点S与超级汇点T
S到每个源点建立一条容量为对应的最大流出容量的边
每个汇点到T建立一条容量为对应的最大流入容量的边
无向图:
把无向图的一条边拆成两个反向的容量相等的有向边
顶点上有流量限制:
把每个顶点拆成两个顶点,一个入,一个出,然后入->出连接一条容量为顶点流量限制c的边
有最小流量限制:
最小费用流问题变形:
与最大流类似
最小权匹配问题:
两类物体之间的对应关系,把两类物体看成顶点,并在顶点之间连接权重为对应花费的边,就转化为最小权匹配问题。
可以使用最小费用流解决
例如:人要从楼A逃到楼B里面去,A里面又Ai个人,B的最大容量为Bi,Ai ->Bj有一个时间花费,问最小的花费。
1、 将A楼的顶点集定为U,B为V,同时增加S,T点
2、 S->Ui 建立容量为Ai,花费为0的边
3、 Vi->T建立容量为Bi ,花费为0的边
4、 Vi->Vj建立通量为INF,花费为对应花费的边
5、 所有大楼的总人数为F,则求的就是流量为F的最小费用流
最大闭合图:
闭合图:有向图的点集,该点集的所有出边都指向这个点集
最大闭合图就是所有点集里顶点权值和最大的一个,通常是反映了某事件是另一个的必要条件,相互依赖。
这个问题可以使用最小割来解决
1、 增加源点S与汇点T
2、 所有原有的边改为容量为INF
3、 对于所有顶点权值为正的建立S->该顶点容量为权值的边
4、 对于所有顶点权值为负的建立该顶点->T容量为权值的相反数的边
5、 求个最小割即可
二分图最小点权覆盖集:
点覆盖:所有的边都至少有一个顶点在这个集合里面。
最小点权覆盖集:权值和最小的点覆盖
1、 增加源点S与汇点T
2、 所有原有的边改为容量为INF
3、 S->U建立容量为对应顶点权值的边
4、 V->T建立容量为对应顶点权值的边
5、 求个最小割即可
二分图最大点独立集:
点独立集:对于所有的边,都满足每条边的两个端点不都是在这个集合里面
最大点独立集:点最多的。
与最小点权覆盖集互补,求最小点权覆盖集,然后用所有顶点权值和减掉最小点权覆盖就是最大独立点集
网络流建图