zoukankan      html  css  js  c++  java
  • 洛谷 P4878 [USACO05DEC]layout布局

    题面链接

    sol:差分约束系统裸题,根据a+b<=c建个图跑个最短路就没了。。。

    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    #define int long long
    #define M(a,v) memset(a,v,sizeof a)
    const int N=10005,inf=0x7fffffffffff;
    int n,m1,m2,tot=0,Next[N*2],to[N*2],val[N*2],head[N*2],dis[N],inq[N],cnt[N];
    inline void add(int x,int y,int z)
    {
        Next[++tot]=head[x]; to[tot]=y; val[tot]=z; head[x]=tot;
    }
    inline void spfa(int s)
    {
        queue<int>q; q.push(s); M(inq,0); M(cnt,0); M(dis,63); dis[s]=0; int i;
        while(!q.empty())
        {
            int x=q.front(); q.pop(); inq[x]=0; if(++cnt[x]>=n){printf("-1
    ");exit(0);}
            for(i=head[x];i;i=Next[i])
            {
                if(dis[to[i]]>dis[x]+val[i])
                {
                    dis[to[i]]=dis[x]+val[i]; if(!inq[to[i]]) q.push(to[i]),inq[to[i]]=1;
                }
            }
        }
    }
    signed main()
    {
        int i,x,y,z; scanf("%lld%lld%lld",&n,&m1,&m2);
        for(i=1;i<=m1;i++)
        {
            scanf("%lld%lld%lld",&x,&y,&z); add(x,y,z);
        }
        for(i=1;i<=m2;i++)
        {
            scanf("%lld%lld%lld",&x,&y,&z); add(y,x,-z);
        }for(i=1;i<=n;i++)add(0,i,0); spfa(0); spfa(1);
        printf("%lld
    ",dis[n]==dis[0]?-2:dis[n]);
    }
  • 相关阅读:
    文件读取原理和文件删除原理
    day 1 随堂作业
    day 2 随堂作业
    day 3 随堂作业
    day 4 随堂作业
    day 5 随堂作业
    day 6 随堂作业
    day 7 随堂作业
    day 8 随堂作业
    day 9 随堂作业
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/9738759.html
Copyright © 2011-2022 走看看