题意:陆逊已知刘备的每个大营最多能容纳Ci个士兵,并且可以估计到第i个大营到第j个大营至少有多少士兵,求刘备最少有多少个士兵。

分析:根据给出的数据我们可以得到一系列不等式组,考虑采用差分约束系统求解。以第一组测试数据解释差分约束系统及构造求解。

设三个军营的人数分别为A1,A2,A3,容量为C1,C2,C3,前n个军营的总人数为Sn,则可以列出以下不等式组。

⑴第i个大营到第j个大营士兵总数至少有k个。

S2 - S0 >= 1100  --->  S0 - S2 <= -1100

S3 - S1 >= 1300  --->  S1 - S3 <= -1300

⑵第i个大营到第j个大营不超过这些兵营容量只和,设d[i]为前i个大营容量总和。

S2 - S0 <= d[2] - d[0] = 3000

S3 - S1 <= d[3] - d[1] = 3000

⑶每个兵营实际人数不超过容量。

A1 <= 1000 ---> S1 - S0 <= 1000

A2 <= 2000 ---> S2 - S1 <= 2000

A3 <= 1000 ---> S3 - S2 <= 1000

⑷Ai>=0

S0 - S1 <= 0

S1 - S2 <= 0

S2 - S3 <= 0

把以上不等式组整理好后,我们就可以构造出一个有向图,构造好图后,我们要求的是 S3 - S0的最小值,即 S3 - S0 >= M  ---> S0 -  S3 <= -M,求S3到S0的最短路径,长度为-M,最终结果就是M。若无最短路径则输出Bad Estimations。

以上参考自:《图论算法理论、实现及应用》---北京大学出版社

第一道差分约束的题,做完还不是很明白 - -。

代码

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>using namespace std;const long long inf = 10000000000000LL;
const int maxn = 10005;struct node{int v;long long w;node(int _v, long long _w){v = _v; w = _w; }
};int n,m;
int c[maxn]; //每个兵营的人数限制
long long d[maxn]; //前i个兵营的人数总和
vector<node> list[maxn];
long long dist[maxn];//for spfa
int cnt[maxn];  //判断负环
bool inq[maxn];bool input(){if(scanf("%d%d",&n,&m) == EOF) return false;for(int i = 1; i <= n; i++) scanf("%d",&c[i]);//求和 d[0] = 0;for(int i = 1; i <= n; i++) d[i] = d[i-1] + c[i];//clearfor(int i = 0; i <= n; i++) list[i].clear();int u,v,w;for(int i = 0; i< m; i++){scanf("%d%d%d",&u,&v,&w);//情形1 list[v].push_back(node(u-1,-w));//情形2list[u-1].push_back(node(v,d[v]-d[u-1]));}for(int i = 1; i <= n; i++){//情形3list[i-1].push_back(node(i,c[i]));//情形4list[i].push_back(node(i-1,0));}return true;
}bool spfa(int s){queue<int> q;for(int i = 0; i <= n; i++){dist[i] = inf;inq[i] = false;cnt[i] = 0;}dist[s] = 0;q.push(s);cnt[s]++;while(!q.empty()){int u = q.front(); q.pop(); inq[u] = false;if(cnt[u] >= n) return false;for(int i = 0; i < list[u].size(); i++){int v = list[u][i].v;long long w = list[u][i].w;if(dist[u] + w < dist[v]){dist[v] = dist[u] + w;if(!inq[v]){q.push(v); inq[v] = true; cnt[v]++;}}}}return true;
}void solve(){if(spfa(n)){printf("%lld\n",-dist[0]);}else{printf("Bad Estimations\n");}
}int main(){while(input()){solve();}return 0;
}

zoj 2770 Burn the Linked Camp(火烧连营)相关推荐

  1. zoj 2770 Burn the Linked Camp(火烧连营) 差分约束

    今天学了一个东西叫差分约束,简单来说就是用最短路知识的三角不等式来解多元不等式组.假设 Xv - Xu <= e 可利用最短路的三角不等式将这个不等式转化为图中的一条边,这条单向边是以u为起点, ...

  2. ZOJ 2770 Burn the Linked Camp 差分约束+SPFA

    第一道正儿八经的差分约束题 有排成一列的n个点,首先告诉你每个点的值最多是多少(最少显然要大于0),然后告诉你m段i,j,k,表示第i个点到第j个点的值的和至少有k,问你总和至少为多少. 要注意的是, ...

  3. ZOJ-2770 Burn the Linked Camp 差分约束

    题意:告诉我们一系列的不等式,当然这些不等式都是两个变量之间的差值,而非和值.刘备拥有N个军营,每个军营都有一个人数的上限,现在陆逊的探子来报刘备的[a, b]军营总人数不低过某一个值,现在问根据这些 ...

  4. zoj2770(差分约束)火烧连营

    差分约束详细解释见电子书 例 4.13 火烧连营(Burn the Linked Camp) 题目来源:ZOJ Monthly, October 2006, ZOJ2770 题目描述: 大家都知道,三 ...

  5. YYHS-吴传之火烧连营(梦回三国系列T3)(trie树)

    题目描述 [题目背景] 蜀汉章武元年(221年),刘备为报吴夺荆州.关羽被杀之仇,率大军攻吴.吴将陆逊为避其锋,坚守不战,双方成对峙之势.蜀军远征,补给困难,又不能速战速决,加上入夏以后天气炎热,以致 ...

  6. trie树——【吴传之火烧连营】

    突然发现好像没有讲过一种叫做tire树的神奇东西. 问题描述: 题目描述 [题目背景] 蜀汉章武元年(221年),刘备为报吴夺荆州.关羽被杀之仇,率大军攻吴.吴将陆逊为避其锋,坚守不战,双方成对峙之势 ...

  7. 2016暑期集训10 C吴传之火烧连营

    吴传之火烧连营 时间限制: 1 Sec 内存限制: 128 MB 题目描述 蜀汉章武元年(221年),刘备为报吴夺荆州.关羽被杀之仇,率大军攻吴.吴将陆逊为避其锋,坚守不战,双方成对峙之势.蜀军远征, ...

  8. Jzoj3908 吴传之火烧连营 (梦回三国系列)

    [题目背景] 蜀汉章武元年(221年),刘备为报吴夺荆州.关羽被杀之仇,率大军攻吴.吴将陆逊为避其锋,坚守不战,双方成对峙之势.蜀军远征,补给困难,又不能速战速决,加上入夏以后天气炎热,以致锐气渐失, ...

  9. JZOJ 3908 吴传之火烧连营

    题目大意 题目大意就是对于一个序列,多次询问求在 xor K 的情况下最大值. 原题 Description [题目背景] 蜀汉章武元年(221年),刘备为报吴夺荆州.关羽被杀之仇,率大军攻吴.吴将陆 ...

最新文章

  1. Wireshark实验HTTP
  2. Java基础篇:常用类
  3. 原创 | IJCAI 2020灭霸式拒稿,AI审稿是否更公平?
  4. IPFS + 区块链 系列】 入门篇 - IPFS + Ethereum (中篇)-js-ipfs-api - 图片上传到IPFS以及下载
  5. sde表空间无法导入数据和编辑
  6. 10条建议让你创建更好的jQuery插件(转载)
  7. python入门环境准备_python入门 之 环境配置(一)
  8. UBLOX配置/GPS配置设置/u-center使用
  9. mysql 全文索引 使用_MySql全文索引
  10. 保姆级教程,如何发现 GitHub 上的优质项目?
  11. Python系列 - pip管理工具
  12. 武汉理工大学计算机考研考纲,2018年武汉理工大学825流体力学考试大纲
  13. Kryo的基本简单使用
  14. html制作不均匀表格,HTML自定义JUnit报告不均匀表格对齐
  15. 计算机组装与维修王利民版,计算机组装与维修(第5版)
  16. kindeditor 上传图片返回带 当前网址的图片地址
  17. P1719 最大加权矩形
  18. 先学python还是ros_如何学习Ros?
  19. 【渝粤教育】国家开放大学2018年秋季 0359-21T会计学原理 参考试题
  20. 分词计算频次代码-GO

热门文章

  1. 考研必备数学公式大全(数学二)
  2. html 自动打开qq浏览器,如何保证成功设置默认浏览器-在线帮助-QQ浏览器官网
  3. 再回首:那些我们不再使用的技术
  4. 学习Unix编程应该看的书籍整理
  5. 对象检测目标小用什么模型好_自动驾驶目标检测- YOLO v3 深入解析
  6. (八)理解跨界思维(85)
  7. 讲清楚同源、跨源、同站、跨站
  8. Qt Quick 简单教程
  9. DeFi 生态大溃败:“寿司”,糊了;“三文鱼”,焦了
  10. 人工智能Python语音识别练习