ZOJ 2770 Burn the Linked Camp 差分约束
链接: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 差分约束的更多相关文章
- ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1770 题目大意: 陆逊为了火烧连营七百里,派出了间谍刺探敌情,得之刘备的军营以 ...
- zoj 2770 Burn the Linked Camp (差分约束系统)
// 差分约束系统// 火烧连营 // n个点 m条边 每天边约束i到j这些军营的人数 n个兵营都有容量// Si表示前i个军营的总数 那么 1.Si-S(i-1)<=C[i] 这里 建边(i- ...
- ZOJ 2770 Burn the Linked Camp(spfa&&bellman)
//差分约束 >=求最长路径 <=求最短路径 结果都一样//spfa#include<stdio.h> #include<string.h> #include< ...
- zoj2770 Burn the Linked Camp --- 差分约束
有n个营地,每一个营地至多容纳Ci人.给出m个条件:第i到第j个营地之间至少有k人. 问n个营地总共至少有多少人. 此题显然差分约束.要求最小值.则建立x-y>=z方程组,建图求最长路. 用d[ ...
- zoj 2770 Burn the Linked Camp
今天刚刚学差分约束系统.利用最短路求解不等式.世界真的好奇妙!感觉不等式漏下几个会导致WA!! #include<cstdio> #include<cstring> #incl ...
- zoj Burn the Linked Camp (查分约束)
Burn the Linked Camp Time Limit: 2 Seconds Memory Limit: 65536 KB It is well known that, in the ...
- Burn the Linked Camp(bellman 差分约束系统)
Burn the Linked Camp Time Limit: 2 Seconds Memory Limit: 65536 KB It is well known that, in the ...
- ZOJ2770 Burn the Linked Camp(差分约束系统)
区间和一定要联系到前缀和. 这题,把前缀和看作点,从s0到sn: 对于每一个营地i的容量capi,有这么个关系si-si-1<=capi: 对于每一个区间的评估i,j,k,有sj-si-1> ...
- ZOJ 2770 差分约束+SPFA
Burn the Linked Camp Time Limit: 2 Seconds Memory Limit: 65536 KB It is well known that, in the ...
随机推荐
- JQuery EasyUI 请求/加载 两次
解决方案如下: Html页面中的Table标签中包含class属性(class="easyui-datagrid"),删除即可.
- Dreamhost 提示No input file specified. 的解决的方法
假设开启FastCGI模式,.htaccess无法生效,一直提示no input file specified. 由于在Fastcgi模式下.php不支持rewrite的目标网址的PATH_INFO的 ...
- Python爬虫框架--pyspider初体验
之前接触scrapy本来是想也许scrapy能够让我的爬虫更快,但是也许是我没有掌握scrapy的要领,所以爬虫运行起来并没有我想象的那么快,看这篇文章就是之前使用scrapy的写得爬虫.然后昨天我又 ...
- 2018 ACM-ICPC 北京赛区小结 @ Reconquista
Statistics TYPE: Onsite Contest NAME: 2018 - ICPC Regional - Asia EC - Beijing PLAT: Hihocoder TIME: ...
- Java容器:HashMap和HashSet解析
转载请注明出处:jiq•钦's technical Blog 一.HashMap HashMap,基于散列(哈希表)存储"Key-Value"对象引用的数据结构. 存入的键必须具备 ...
- 常用 Git 命令文档和命令
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3IAAAEVCAIAAAAq20B9AAAgAElEQVR4nOydd3wUxfvH93p6gQRCCF ...
- java网络编程1-查询Internet地址
//经过dns查询后的结果会缓存起来,成功结果永久缓存,失败结果会缓存10s,通过下面的方法设置成功和失败的缓存时间 // 0为不缓存,-1为永不过期,其它单位为s Security.setPrope ...
- 【Raspberry Pi】crontab 定时任务
在linux上做定时任务一般用crond 两种方法上文已列,但昨天写的crond命令却一直都没有运行,上网查,有说是环境变量的,也有说是时间问题的,都改过,但还没有效. 今天再次认真读了一遍cront ...
- Unity3D必备知识: 物理学公式
一.质点的运动(1)——直线运动 1)匀变速直线运动 1.平均速度V=s/t(定义式) 2.有用推论Vt*Vt-Vo*Vo=2as 3.中间时刻速度Vt/2=V平=(Vt+Vo)/2 4.末速度Vt= ...
- iOS - 导航栏UINavigationController经常使用属性
1.设置导航栏标题 self.title = @"dylan_李伟宾"; 2.设置导航栏样式 设置方法: [self.navigationController.navigation ...