• 【图论】差分约束系统


    给定一组不等式:
    (x_{v1}-x_{u1}le w_1)
    (x_{v2}-x_{u2}le w_2)

    (注意上面的变量的位置是(v,u,w)而不是(u,v,w))

    求满足上面约束的一组可行解,变形为 (dis[v_1]le dis[u_1]+w_1) ,故从点 u 连接一条权值为 w_1 的边到点 v。

    namespace SDC {
    
        const int MAXN = 2e5 + 10;
    
        int n;
        vector<pil> G[MAXN];
    
        ll dis[MAXN];
        int cnt[MAXN];
        bool vis[MAXN];
    
        queue<int> Q;
    
        bool bellmanford() {
            fill(dis + 1, dis + 1 + n, LINF);
            fill(cnt + 1, cnt + 1 + n, 0);
            fill(vis + 1, vis + 1 + n, 0);
            while(!Q.empty())
                Q.pop();
            dis[n] = 0;
            vis[n] = 1;
            Q.push(n);
            while(!Q.empty()) {
                int u = Q.front();
                Q.pop();
                vis[u] = 0;
                ++cnt[u];
                if(cnt[u] == n)
                    return false;
                for(pil &p : G[u]) {
                    int v = p.first;
                    ll w = p.second;
                    if(dis[v] <= dis[u] + w)
                        continue;
                    dis[v] = dis[u] + w;
                    if(!vis[v]) {
                        vis[v] = 1;
                        Q.push(v);
                    }
                }
            }
            return true;
        }
    
        bool sdc() {
            ++n;
            G[n].clear();
            for(int i = 1; i <= n - 1; ++i)
                G[n].eb(i, 0);
            int res = bellmanford();
            G[n].clear();
            --n;
            return res;
        }
    
    }
    

    其他:

    求一组非负整数解:全部加上一个最小值

    上面要求是两个变量的差分满足某个不等式的约束。可以通过前缀和和差分的转化把区间求和转化为前缀和的差分。令 (S_i=a_1+a_2+cdots+a_i) ,那么某个区间[L,R]的元素的和不超过一个定值w转换为 (S_R-S_{L-1}le w)

    对于两个变量的比例满足某个不等式的约束,那么可以通过取对数变成差分约束。

    若w全部都>=0,可以用Dijkstra求解。

  • 相关阅读:
    docker搭建主从复制mysql
    mysql主从复制(mariadb)
    docker搭建mysql8.0
    docker安装mysql
    终端配置kxsw
    AJAX教程
    移动端常见布局
    css为什么需要精灵图
    元素的显示与隐藏
    css网页布局总结
  • 原文地址:https://www.cnblogs.com/purinliang/p/14394879.html
Copyright © 2020-2023  润新知