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;
    }
  • 相关阅读:
    遗传算法求解旅行商(TSP)问题 -- python
    office 小技巧
    oracle创建dblink
    c# equals与==的区别
    两人之间的一些参数
    .net 枚举(Enum)使用总结
    SQL Server 日期的加减函数: DATEDIFF DATEADD
    jquery操作select
    AS3帮助手册
    Razor和HtmlHelper的使用意义
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11214815.html
Copyright © 2011-2022 走看看