zoukankan      html  css  js  c++  java
  • 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。
    先放着再想想吧。

  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758799.html
Copyright © 2011-2022 走看看