链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?

problemCode=2770

Burn the Linked Camp


Time Limit: 2 Seconds     
Memory Limit: 65536 KB


It is well known that, in the period of The Three Empires, Liu Bei, the emperor of the Shu Empire, was defeated by Lu Xun, a general of the Wu Empire. The defeat was due to Liu Bei's wrong decision that he divided his large troops into a number of camps,
each of which had a group of armies, and located them in a line. This was the so-called "Linked Camps".

Let's go back to that time. Lu Xun had sent many scouts to obtain the information about his enemy. From his scouts, he knew that Liu Bei had divided his troops into n camps, all of which located in a line, labeled by 1..n from left to right. The ith camp
had a maximum capacity of Ci soldiers. Furthermore, by observing the activities Liu Bei's troops had been doing those days, Lu Xun could estimate the least total number of soldiers that were lived in from the ith to the jth camp. Finally, Lu Xun must estimate
at least how many soldiers did Liu Bei had, so that he could decide how many troops he should send to burn Liu Bei's Linked Camps.

Input:

There are multiple test cases! On the first line of each test case, there are two integers n (0<n<=1,000) and m (0<=m<=10,000). On the second line, there are n integers C1��Cn. Then m lines follow, each line has three integers i, j, k (0<i<=j<=n, 0<=k<2^31),
meaning that the total number of soldiers from the ith camp to the jth camp is at least k.

Output:

For each test case, output one integer in a single line: the least number of all soldiers in Liu Bei's army from Lu Xun's observation. However, Lu Xun's estimations given in the input data may be very unprecise. If his estimations cannot be true, output
"Bad Estimations" in a single line instead.

Sample Input:

3 2
1000 2000 1000
1 2 1100
2 3 1300
3 1
100 200 300
2 3 600

Sample Output:

1300
Bad Estimations

和这题一样

http://blog.csdn.net/u013532224/article/details/46897989

就是在相邻点之间建边的时候有点不一样。

题意:

神陆逊 计算 刘备连营的兵力。

给出了刘备n个连营的 最大兵力Ci。

然后 又得到情报 知道  i到j 连营的兵力 至少是k。

然后计算全部人数 最少有多少

做法:(括号内表示该点及其左边全部人数和!!!!!!!!!!)

我们从0点出发。

到1号点,由于连营有最大兵力限制。

所以  (1)-(0)<=C1

又由于 后面的人数前缀和 肯定大于前面的

所以(0)-(1)<=0

然后后面n个点之间都有这样的关系。

(i)-(i-1)<=Ci

(i-1)-(i)<=0

然后依据差分约束。建边。

然后i到j点的兵力不超过k

说明

(j)-(i-1)>=k

(i-1)-(j)<=-k

然后建边。

计算人数和的最小值。

所以就是 计算 (n)-(0)>=?

加个负号

(0)-(n)<=-?

跑个最短路。答案取负即可了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include <set>
#include <map> #define VM 6000
#define EM 80005
#define inf 0x7f7f7f7f
int head[VM],ep;
struct edge
{
int v,w,next;
}e[EM]; void addedge(int cu,int cv,int cw)
{
ep ++;
e[ep].v = cv;
e[ep].w = cw;
e[ep].next = head[cu];
head[cu] = ep;
} int spfa (int n,int sta,int ee)
{
int vis[VM],stack[VM],dis[VM],vn[VM];
memset(vis,0,sizeof(vis));
memset(dis,inf,sizeof dis);
//for(int i=1;i<=n;i++)
//dis[i]=-inf;
memset(vn,0,sizeof vn);
vn[sta]=1;
dis[sta] = 0;
vis[sta] = 1;
int top = 1;
stack[0] = sta;
while (top)
{
int u = stack[--top];
if(vn[u]>n)
return -inf;
vis[u] = 0;
for (int i = head[u];i != -1;i = e[i].next)
{
int v = e[i].v;
if (dis[v] > dis[u] + e[i].w)
{
dis[v] = dis[u] + e[i].w;
if (!vis[v])
{
vis[v] = 1;
vn[v]++;
stack[top++] = v;
}
}
}
}
return dis[ee];
}
int main ()
{
int n,m,v1,v2,cost;
int ml,md;
while(scanf("%d%d",&n,&m)!=EOF)
{
ep = 0;
memset (head,-1,sizeof(head)); for(int i=1;i<=n;i++)
{
int tem;
scanf("%d",&tem);
addedge(i,i-1,0);//(i)-(i+1)《=0 后面的点数大
addedge(i-1,i,tem);//(i+1)-(i)《=1 i+1 最多放一个
}
for(int i=0;i<m;i++)
{
int u,v,lim;
scanf("%d%d%d",&u,&v,&lim); //v-u<=lim
addedge(v,u-1,-lim);// v-(u-1)>=lim (u-v)<=lim
} int ans=spfa(n+1,n,0); if(ans==-inf)
puts("Bad Estimations");//负环 有矛盾条件
else if(ans==inf)//无限多
puts("-2");
else
printf("%d\n",-ans);
}
return 0;
}

ZOJ 2770 Burn the Linked Camp 差分约束的更多相关文章

  1. ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1770 题目大意: 陆逊为了火烧连营七百里,派出了间谍刺探敌情,得之刘备的军营以 ...

  2. zoj 2770 Burn the Linked Camp (差分约束系统)

    // 差分约束系统// 火烧连营 // n个点 m条边 每天边约束i到j这些军营的人数 n个兵营都有容量// Si表示前i个军营的总数 那么 1.Si-S(i-1)<=C[i] 这里 建边(i- ...

  3. ZOJ 2770 Burn the Linked Camp(spfa&&bellman)

    //差分约束 >=求最长路径 <=求最短路径 结果都一样//spfa#include<stdio.h> #include<string.h> #include< ...

  4. zoj2770 Burn the Linked Camp --- 差分约束

    有n个营地,每一个营地至多容纳Ci人.给出m个条件:第i到第j个营地之间至少有k人. 问n个营地总共至少有多少人. 此题显然差分约束.要求最小值.则建立x-y>=z方程组,建图求最长路. 用d[ ...

  5. zoj 2770 Burn the Linked Camp

    今天刚刚学差分约束系统.利用最短路求解不等式.世界真的好奇妙!感觉不等式漏下几个会导致WA!! #include<cstdio> #include<cstring> #incl ...

  6. zoj Burn the Linked Camp (查分约束)

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

  7. Burn the Linked Camp(bellman 差分约束系统)

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

  8. ZOJ2770 Burn the Linked Camp(差分约束系统)

    区间和一定要联系到前缀和. 这题,把前缀和看作点,从s0到sn: 对于每一个营地i的容量capi,有这么个关系si-si-1<=capi: 对于每一个区间的评估i,j,k,有sj-si-1> ...

  9. ZOJ 2770 差分约束+SPFA

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

随机推荐

  1. JS高程3:面向对象的程序设计——理解对象

    JS中对象的定义: (无序)属性的集合 (无序)值的集合 (无序)名值对的集合 JS对象是基于引用数据类型来创建的. JS对象创建的2种方式: 传统方式 对象字面量 var person = new ...

  2. tomcat打印GC日志

    在catinlin.sh的最上面加上 JAVA_OPTS=" -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/lnmp/tomcat8 ...

  3. oracle表空间中PCTFREE, PCTUSED, INITRANS, MAXTRANX参数的解释

    1. PCTFREE 要形容一个 BLOCK 的运作,我们可以把一个 BLOCK 想成一个水杯.侍者把水倒入放在我们面前的水杯,要多满呢,我们要求他倒 9 分满好了,这时候 PCTFREE 代表着设定 ...

  4. vue render函数 函数组件化

    之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法,它只是一个接受参数的函数 在这个例子中,我们标记组件为functional,这意味它是无状态(没有data), ...

  5. 1.1 Application Fundamentals - 应用原理

    Android应用是使用Java编程语言编写的.Android SDK工具把代码.资源和数据文件编译为一个Android包,这是一个有.apk后缀的压缩文件.一个单独的.apk文件里包含所有的代码,这 ...

  6. FileMonitorKit 文件操作监控工具

    本人业余时间写的一款文件操作监控工具,功能稳定.效果非常好,有兴趣的网友能够下载玩玩. 下载地址: 32位:http://pan.baidu.com/s/1o64ZFIi          FileM ...

  7. 迅搜sdk试用

    1. sdk支持PHP 2. 针对mysql的某个库的某个表??进行索引,简单的说就是一个project,需要对应一个配置文件: 3. 分索引服务与搜索服务两个,另带中文分词功能:索引数据会有演示,但 ...

  8. linux控制台超时自动注销

    仅让root用户超时退出: 编辑/root/.bash_profile文件,添加 export TMOUT=300 #300秒超时自动退出root 对所有用户设置自动注销: vi /etc/profi ...

  9. ffmpeg 和 x264的参数对照

    ffmpeg 和 x264的参数对照   x264 ffmpeg 说明 命令行 字段 命令行 字段 qp qp_constant cqp cqp 固定量化因子.取值范围0到51. 经常取值在20-40 ...

  10. 与时间有关的类Date,DateFormat,Calendar

    Date类用于表示日期和时间.它没考虑国际化问题,所以又设计了另外两个类. Calendar类: 主要是进行日期字段之间的相互操作. 编程实例:计算出距当前日期时间315天后的日期时间,并使用”xxx ...