首页 > 其他分享 >费用流消圈定理

费用流消圈定理

时间:2022-10-10 11:14:11浏览次数:48  
标签:费用 cnt int 流消圈 memset mark hh sizeof 定理

有负权环的费用流直接跑EK会死循环,根据消圈定理:该最小费用流最后的残余网络不存在负权环。

可以提前消去负权环,

bool clear_circle(int &cost){
    memset(cnt,0,sizeof cnt);
    memset(d,0x3f,sizeof d);
    memset(vis,0,sizeof vis);
    memset(mark,0,sizeof mark);
    int hh = 0,tt = 1;
    q[0] = S,d[S] = 0;
    while(hh!=tt){
        int u = q[hh++];
        if(hh == N)hh = 0;
        vis[u] = false;
        for(int i = h[u];~i;i=ne[i]){
            int j = e[i];
            if(f[i] && d[j]>d[u]+w[i]){
                cnt[j] = cnt[u] + 1;
                d[j] = d[u] + w[i];
                pre[j] = i;
                if(cnt[j]>=n+2){
                    
                    int t = j;
                    while(!mark[t]){
                        mark[t] = true;
                        t = e[pre[t]^1];
                    }
                    bool flg = true;
                    int mx = 1e9;
                    for(int i = t;flg || i!=t;i=e[pre[i]^1]){
                        flg = false;
                        // cout<<i<<" "<<e[pre[i]^1]<<" "<<w[i]<<'\n';
                        mx = min(mx,f[pre[i]]);
                        // f[pre[i]]-=1;
                        // f[pre[i]^1]+=1;
                        // cost += w[pre[i]];
                    }
                    flg = true;
                    for(int i = t;flg || i!=t;i=e[pre[i]^1]){
                        flg = false;
                        // cout<<i<<" "<<e[pre[i]^1]<<" "<<w[i]<<'\n';
                        f[pre[i]]-=mx;
                        f[pre[i]^1]+=mx;
                        cost += mx*w[pre[i]];
                    }
                    return true;
                }
                if(!vis[j]){
                    q[tt++] = j;
                    if(tt == N)tt = 0;
                    vis[j] = true;
                }
            }
        }
    }
    return false;
}
View Code

详细如上

标签:费用,cnt,int,流消圈,memset,mark,hh,sizeof,定理
From: https://www.cnblogs.com/wanghai673/p/16774899.html

相关文章

  • 磁介质中的安培环路定理
    由真空中的安培环路定理\(\int\vec{B_0}d\vec{l}=\mu_0\sumI_c①\)在磁介质中,由于磁介质中的电子会受到电流的影响产生感应电流,设其为\(I_s\),根据在真空中的环路......
  • lucas定理快速求解组合数(适用于MOD较小)
    lucus求解组合数的时间复杂度为O(MODlogn(MOD))适用于MOD较小但n较大的情况模板:LLMOD=1e6+3;LLQuickExp(LLbase,LLexp){LLres=1;while(exp){......
  • 网络流之费用流
    P4016负载平衡问题-洛谷|计算机科学教育新生态(luogu.com.cn)建模很重要!!!费用的大小可以自己去定义,并不一定会直接告诉你,这道题每次移动都是1,相当于单位费用就为1......
  • 欧拉定理的证明
      上图中第1句话(标红色的)说明a*xi%n结果仍落在Zn 这个集合中,因为a与xi都与n互质,所以乘出来的结果,仍与N互质第2句话(标红色的)说明a*xi%N不等于a*xj%N因为如果相等......
  • 矩阵树定理
    线性代数基础,行列式性质。https://www.cnblogs.com/alex-wei/p/LinearAlgebra.html变元外向树:父到子的边,也就是每个点的入度为1。内向树:与上者相反,即出度为1。外向......
  • [答疑]费用报销系统的用例图
    ​​别把洋垃圾当宝贝-评InfoQ中国“敏捷……”文章(一)​​譯揮(252***66)15:00:19请大家看看这个系统用例图正确吗,有什么问题?向日葵(100***61)15:09:00普通员工不能接触这......
  • 面积相关公式与定理
    正弦定理在任意\(△ABC\)中,角\(A、B、C\)所对的边长分别为\(a、b、c\),三角形外接圆的半径为\(R\),直径为\(D\)。则有:余弦定理圆形面积交CF600D求圆形面积交。......
  • ICPC网络赛2A&&费马小定理
    题目链接:https://pintia.cn/problem-sets/1574060137151397888/exam/problems/1574060247893606400费马小定理:如果p是一个质数,而整数a不是p的倍数(gcd(p,a)=1),则有a^(p-1......
  • 韦达定理之推导
    \[ax^2+bx+c=0\]\[\\\\\]\[a(x^2+\frac{b}{a}x+\frac{c}{a})=0\]\[\\\\\]\[x^2+\frac{b}{a}x=-\frac{c}{a}\]\[\\\\\]\[x^2+\frac{b}{a}x+(\frac{b}{2a}......
  • 奈氏准则和香农定理
    失真影响失真程度的因素:1.码元传输速率2.信号传输距离3.噪声干扰4.传输媒体质量失真的一种现象————码间串扰奈氏准则香农定理......