• ZOJ 2770_Burn the Linked Camp


    题意:

    给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵?

    分析:

    差分约束系统,注意

    • 第i到第j至少有k个
    • 第i到第j最多有最大容量之和个
    • 每个兵营至少有0个
    • 每个兵营最多有最大容量个

    代码:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    using namespace std;
    #define mem(s,a)  memset(s, a, sizeof(s))
    typedef long long ll;
    const int maxm = 25005, maxn = 1005;
    #define INF 0x3ffffffff
    struct edge{int u,v;ll w;};
    edge e[maxm];
    int c[maxn];
    long long d[maxn];
    int m, n, tot;
    bool bellford()
    {
        fill(d,d+n+1,INF);
        d[n] = 0;
        for(int i = 0; i < n + 1; i++){
            for(int j = 0; j < tot; j++){
                int u1= e[j].u, v1 = e[j].v;
                if(d[u1]!=INF&&d[v1]-d[u1]>e[j].w){
                     d[v1] = d[u1] + e[j].w;
                     if(i == n)  return false;
                }
            }
        }
        return true;
    }
    int main (void)
    {
        int t;
        while(~scanf("%d%d",&n, &m)){
           mem(c,0);
            for(int i = 1; i <= n; i++){
                    scanf("%d",&t);
                    c[i] = c[i-1] +t;
            }
            int i, j, k;
            tot = 0;
            for(int a = 0; a < m; a++){
                scanf("%d%d%d",&i,&j,&k);
                e[tot++] = (edge){j, i-1, -k};
                e[tot++] = (edge){i-1, j, c[j]-c[i-1]};
            }
            for(int b= 0; b < n; b++){
                e[tot++] = (edge){b, b + 1, c[b + 1] - c[b]};
                e[tot++] = (edge){b+1, b, 0};
            }
    
           if(bellford()) printf("%I64d
    ",d[n]-d[0]);
            else  printf("Bad Estimations
    ");
    
        }
        return 0;
    }
    
    

    之前一直怕k会很大,就用了long long,可是INF忘记改,一直PE,后来改了INF,AC,改成int,AC,可是到现在也不明白为什么是PE而不是WA。
    先放着再想想吧。

  • 相关阅读:
    myeclipse 代码提示(alt+/)
    彻底解决mysql中文乱码
    Pycharm取消默认的右击运行unittest方法
    解决Ubuntu的root账号无法登录SSH问题-Permission denied, please try again.
    language support图标在哪里?怎么消失了?
    Ubuntu安装谷歌输入法或者搜狗
    最大流算法-ISAP
    WC2013-糖果公园
    bzoj4032-最短不公共子串
    bzoj1031-字符加密
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758799.html
Copyright © 2020-2023  润新知