zoukankan      html  css  js  c++  java
  • [USACO05DEC] 布局 [差分约束]

    P4878 [USACO05DEC] 布局    #10090. 「一本通 3.4 练习 2」布局 Layout

    好像大家都打的最短路

    懒得想了 打的最长路 然后因为我瞎建边 所以最后输出得输出其相反数

    #include<bits/stdc++.h>
    using namespace std;
    #define Max(x,y) (x)>(y)?(x):(y)
    #define Min(x,y) (x)>(y)?(y):(x)
    #define ll long long
    #define rg register
    const int N=1e5+5,M=10000+5,inf=0x3f3f3f3f,P=99999997;
    int n,ml,md,qd1,qdn;
    ll ans=0;
    bool l1[N];
    template <class t>void rd(t &x){
        x=0;int w=0;char ch=0;
        while(!isdigit(ch)) w|=ch=='-',ch=getchar();
        while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
        x=w?-x:x;
    }
    
    int head[N],tot=0;
    struct edge{int v,w,nxt;}e[N<<2];
    void add(int u,int v,int w){
        e[++tot]=(edge){v,w,head[u]},head[u]=tot;
    }
    
    int dis[N],use[N];
    bool vis[N];
    void spfa(int x){
        for(int i=1;i<=n;++i) vis[i]=use[i]=0,dis[i]=-inf;
        deque<int>q;
        q.push_back(x),vis[x]=1,dis[x]=use[x]=0;
        while(!q.empty()){
            int u=q.front();
            q.pop_front(),vis[u]=0;
            ++use[u];
            if(use[u]>=n) {puts("-1");exit(0);}
            for(int i=head[u],v,w;i;i=e[i].nxt){
                v=e[i].v,w=e[i].w;
                if(dis[v]<dis[u]+w){
                    dis[v]=dis[u]+w;
                    if(!vis[v]){
                        if(q.empty()) q.push_back(v);
                        else if(dis[v]>dis[q.front()]) q.push_front(v);
                             else q.push_back(v);
                        vis[v]=1;
                    }
                }
            }
        }
    }
    
    
    int main(){
        freopen("in2.txt","r",stdin);
        rd(n),rd(ml),rd(md);
        for(int i=1;i<=n;++i) add(0,i,0);
        for(int i=1,a,b,w;i<=ml;++i){
            rd(a),rd(b),rd(w);
            add(a,b,-w);
        }
        for(int i=1,a,b,w;i<=md;++i){
            rd(a),rd(b),rd(w);
            add(b,a,w);
        }
        spfa(0);
        spfa(1);
        if(dis[n]==-inf) puts("-2");
        else printf("%d",-dis[n]);
        return 0;
    }
  • 相关阅读:
    OS-lab4
    OS-lab3
    OS-lab2
    OS-lab1
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    HTTP_POST
    实习日志1(2020.7.27-2020.9.31)
    Web app ------ 从Servlet读取Json数据并显示,生成历史数据曲线图
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11214815.html
Copyright © 2011-2022 走看看