• POJ 3169 Layout (差分约束入门)


    线性约束

    将所有不等式化成 (d[a] - d[b] <= c) 的形式,即有 (a,b,c)这条有向边,跑最短路即可

    
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #define ll long long
    using namespace std;
    typedef  pair<int,int> pii;
    
    const int N = 1e5+10;
    const int inf = 0x3f3f3f3f;
    struct E{
        int u,v,nxt,w;
        E(){}
        E(int u,int v,int nxt,int w):u(u),v(v),nxt(nxt),w(w){}
    }eg[N*3];
    int head[N],cnt[N],vis[N],tot;
    ll d[N];
    void init(){
        tot = 0 ; memset(head,-1,sizeof head);
    }
    void add(int u,int v,int w){
        eg[++tot].u = u;    eg[tot].v = v;  eg[tot].w = w;  eg[tot].nxt = head[u]; head[u] = tot;
    }
    int n,ml,md;
    bool spfa(int s){
        fill(d,d+n+1,inf);
        memset(vis,0,sizeof(vis));
        memset(cnt,0,sizeof(cnt));
        queue<int> q;
        q.push(s); d[s] = 0; vis[s] = 1;
        while(q.size()){
            int u = q.front();  q.pop();
            vis[u] = 0;
            for(int i=head[u];~i;i=eg[i].nxt){
                int v = eg[i].v , w = eg[i].w;
                if(d[v] > d[u] + w){
                    d[v] = d[u] + w;
                    cnt[v] = cnt[u] + 1;
                    if(cnt[v]>n){
                        return true;
                    }
                    if(!vis[v]){
                        vis[v] = 1;
                        q.push(v);
                    }
                }
            }
        }
        return false;
    }
    int main(){
        int u,v,w;
        init();
        scanf("%d%d%d",&n,&ml,&md);
        for(int i=1;i<=ml;++i){
            scanf("%d%d%d",&u,&v,&w);
            add(u,v,w);
            // add(v,u,w);
        }
        for(int i=1;i<=md;++i){
            scanf("%d%d%d",&u,&v,&w);
            add(v,u,-w);    // 移项变号
        }
        for(int i=1;i<n;++i){
            add(i+1,i,0);   // 如果能重合就是0,不能重合就是-1
        }
        if(spfa(1))    puts("-1");
        else if(d[n]==inf)  puts("-2");
        else printf("%lld
    ",d[n]);
        return 0;
    }
    
    

    大佬博客先马住

  • 相关阅读:
    增加正则项Regularization to Prevent Overfitting
    feature_column、fc.input_layer以及各种类型的column如何转化
    input_fn如何读取数据
    matplotlib.pyplot如何绘制多张子图
    机器学习之杂乱笔记
    Adobe Flash Player
    LSTM/GRU-讲得非常细致
    anaconda python36 tensorflow virtualenv
    畅通工程-HZNU寒假集训
    食物链-HZUN寒假集训
  • 原文地址:https://www.cnblogs.com/xxrlz/p/11617132.html
Copyright © 2020-2023  润新知