网络流的网络流

做了一段时间的网络流,发现只会刷水,稍难的都不会。。。

水题就不放出来了,放一些模型和有趣的题吧

经典模型:
BZOJ1070: 每个人拆成若干个点,每辆车和拆出的第i个点连就代表他是这个人倒数第i辆修的车,对答案贡献i*c
BZOJ1532: 二分最大流
BZOJ1565: 最大权闭合子图:即点有依赖关系,对于一条边 (u,v) ,选了点 u 必须点 v ,选择一个点集使权值最大,构图:新增源,向正权点连边容量为点权,新增汇,负权点向汇连边容量为权值相反数,原图里的边容量为INF, 和源连的边容量总和减去新图的最小割即最大权值
BZOJ1927:因为出入度确定,点拆成一个出度点一个入度点,原图里的边在出入度里照连,源连向每个入度瞬移的费用

有趣的题目:

bzoj2597
石头剪刀布的情况好像没法算捏,考虑三个人猜拳除了石头剪刀布的情况,其他情况都是一人赢两次,一人赢一次输一次,一人输两次的情况,考虑让这种情况最小化。
用赢两次的那个人统计这种情况,一个人身上的情况是出度×(出度-1)/2,每场比赛一个点,连向相关的两人容量为1,每个人连汇点n条边代表赢i次增加的情况,如果本身已经有i的出度,1~i条边都不用建,所有情况数减费用流结果就是最多的情况,输出方案扫一下边

codechef Annual Parade: 传送门
首先一个城市经过多次意义只是为了到达其他城市,所以Floyd后转化成每个城市只去一次,唯一前驱后继,每个点拆出入度连边,费用流。因为我们一次费用流就是增广一条路径,到达一个点,假设这次增广费用是V,如果 V<C ,那么这次增广就可以对答案产生贡献,那么预处理出所有增广,将询问按C排序扫一遍就可以了

codechef Game of Numbers:传送门
每个数对只能用一次, a[i]<b[j] a[q]>b[p] 匹配,求最大匹配数,可以很容易先想到左边为 a[i]<b[j] ,右边 a[q]>b[p] 的最大流,至于GCD的限制,将GCD分解质因数,质因数放中间连就行了

codechef Course Selection:传送门
最小割
主要是一个课程的前驱要在他之前学很难限制
将每个课程拆成m+1个点,源和第1个点连inf,然后每个点和他后一个点连容量为 100 这一学期学的分数,x课程如果是y课程的前驱,那对于x课程的任意第i个点,向y课程第i+1个点连边,n*100-最小割

网络流的题很多要拆点拆边什么的,要注意一些模型
最大流的题一般不会太难,有时加个总和减最大流,二分什么的
费用流挺多要拆边的
最小割的很多都是一个点连源汇代表选还是不选,解个方程,用总和减最小割就是最大值
不知道说什么就这样吧

你可能感兴趣的:(网络流)