称号:
分类:无汇的有上下界网络流。
题意:
给n个点。及m根pipe,每根pipe用来流躺液体的。单向的。每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体。里面流躺物质。
而且满足每根pipe一定的流量限制,范围为[Li,Ri].即要满足每时刻流进来的不能超过Ri(最大流问题)。同一时候最小不能低于Li。
比如:
46(4个点,6个pipe)12 1 3 (1->2上界为3,下界为1)23 1 33 4 1 34 1 1 31 3 1 34 2 1 3
可行流:
再如:全部pipe的上界为2下界为1的话,就不能得到一种可行流。
题解:
上界用ci表示,下界用bi表示。
下界是必须流满的,那么对于每一条边,去掉下界后,其自由流为ci– bi。
主要思想:每个点流进来的流=流出去的流
对于每个点i,令
Mi= sum(i点全部流进来的下界流)– sum(i点全部流出去的下界流)
假设Mi大于0,代表此点必须还要流出去Mi的自由流,那么我们从源点连一条Mi的边到该点。
假设Mi小于0,代表此点必须还要流进来Mi的自由流。那么我们从该点连一条Mi的边到汇点。
假设求S->T的最大流,看是否满流(S的相邻边都流满)。
满流则有解,否则无解。
AC代码:
#include #include #include #include #include #include #include
版权声明:本文博主原创文章,博客,未经同意不得转载。