首页 > 技术文章 > [网络流]

Candyouth 2016-04-13 17:15 原文

看大家都有网络流总结,我也来水一水。。

一下都是BZOJ上的题目。

1.在网格图上的网络流。

[文理分科]如果选择一个点且四周的点被选择,那么会产生一个贡献。

将每一个二元关系看做一个新点,不可割断的边设为INF。


 [方格取数]在一个n*n的方格里,每个格子里都有一个正整数。从中取出若干数,使得任意两个取出的数所在格子没有公共边,且取出的数的总和尽量大。

将网格黑白染色。然后S->black, white->T,black->white


 [Exca王者之剑]给定一个n*m的矩阵,每个格子有宝石,人任选位置出发,取走当前位置的宝石之后四周的宝石消失,然后可以走两步,重复上述过程

容易发现一个格子取了那么四周的格子都不能取 于是方格取数问题

黑白染色 黑色点连源 白色点连汇 流量为格子的权值 黑白之间连边 流量为正无穷 用总和减去最大流就是答案


 [最优选择]如果选择一个点或者这个点四周的点被选择,那么会产生一个贡献。

有且有或。那么考虑选了四周的点就不会选择这个点了,将网格图黑白染色。将白色点S,T翻转。然后建立新点,最小割。

我们将网格图红黑染色,将红色的点反转源汇
对于一个点,如果这个点分到T集表示选择,那么:
如果这个点和周围的4个点都被划分到了S集,那么将会产生一个收益
如果这个点被划分到了T集,将会产生一个代价和一个收益

此题与“文理分科”那道题目有些类似。都是使用最小割来求解,先加上可能获得的权值,在减掉必须舍弃的权值(最小割)。

文理分科是规定每个人和 S 连就是选文,和 T 连就是选理。然后如果一个人和相邻的人都全文就会获得一个权值,那么我们就为这个权值建一个点,让这个点与必须同时选文的5个人连 INF 边。这样只要这 5 个人中有一个人选了理,就必须舍弃这个权值了。

再回到这道题目,这道题获得权值的条件是这个点被控制或这个点相邻的 4 个点都被控制。 这个“或”并不太好处理,我们就把这个条件拆成两个不相交的条件:

1)这个点被控制,可以获得权值。

2)这个点没有被控制且相邻的4个点都被控制,可以获得权值。

这样的话第一个条件就是不控制这个点需要付出的代价,第二个条件是“这个点没有被控制且相邻的4个点都被控制”,只要有一个点不符合就要割掉这个权值。

但是这些需要同时满足的条件有“被控制”和“不被控制”,直接用“文理分科”的建图方式是方向不一致的。

所以我们利用矩阵可以黑白染色成为二分图的性质,将矩阵的格子黑白染色之后,对于白点和黑点用相反的方式连边,这样黑点的“被控制”和白点的“不被控制”就是一个方向的了。

注意刚开始时预先加到答案里的权值是给定权值的两倍,因为我们将权值分成了两种情况。


 2.一般图上的网络流。

裸网络流。

二分答案+网络流。(0/1分规+网络流(最大权闭合图。))

3.有上下界的网络流。

无源汇的上下界可行流
无源汇的最小费用上下界可行流
有源汇的上下界最大流:t向s连一条inf,求一个可行流,ans+=t向s这条边的实际流量,然后删去这条边,再跑一个s到t的最大流,ans+=这个最大流。
有源汇的上下界最小流:t向s连一条inf,求一个可行流,ans+=t向s这条边的实际流量,然后删去这条边,再跑一个t到s的最大流,ans-=这个最大流。

4.费用流

5.无向图的点连通度:求最少去掉多少个点能使无向图不连通
做法:拆点求最小割
6.最小割的可行边和必须边
两者的大前提:u v满流
可行边:tarjan完了之后不在同一个强连通分量里
必须边:dfs
7.最大权闭合子图:V中所有点的出边都指向V里的点 则V是一个闭合子图
(对二元关系的理解嘛 只算额外代价)
8.限制距离模型
9.混合图的欧拉回路

推荐阅读