2018-team4-modules-上下界可行流
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
上下界可行流
无源汇做法:强制流满下界,流量限制变为0~mx-mn,同上建立源汇满足流量等式
对源汇做最大流,如果跑不满新加的边则说明没有可行流,否则有
有源汇做法类似, 先从汇连一条上限INF的边到源,然后用无源汇做法消掉下界,就可以知道有没有可行流
若要求最大流,则用原本的源到汇做最大流
要求最小流则从汇到源做最大流,即尽可能退流
{{{
void lim(int x,int y,int l,int r,int c=0){
cost+=1ll*c*l; //这是上下界费用流的费用
deg[x]-=l,deg[y]+=l;
if (r!=l) add(x,y,r-l,c);
}
}}}
上下界可行流
无源汇做法:强制流满下界,流量限制变为0~mx-mn,同上建立源汇满足流量等式
对源汇做最大流,如果跑不满新加的边则说明没有可行流,否则有
有源汇做法类似, 先从汇连一条上限INF的边到源,然后用无源汇做法消掉下界,就可以知道有没有可行流
若要求最大流,则用原本的源到汇做最大流
要求最小流则从汇到源做最大流,即尽可能退流
void lim(int x,int y,int l,int r,int c=0){
cost+=1ll*c*l; //这是上下界费用流的费用
deg[x]-=l,deg[y]+=l;
if (r!=l) add(x,y,r-l,c);
}