第一道正儿八经的差分约束题

有排成一列的n个点,首先告诉你每个点的值最多是多少(最少显然要大于0),然后告诉你m段i,j,k,表示第i个点到第j个点的值的和至少有k,问你总和至少为多少。

要注意的是,告诉你的所有关系式都不要忘记建边,一开始漏了大于0的条件调半天o(╯□╰)o

不等式的形式是a-b<=c这样的= =

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <climits>
 6 #include <string>
 7 #include <iostream>
 8 #include <map>
 9 #include <cstdlib>
10 #include <list>
11 #include <set>
12 #include <queue>
13 #include <stack>
14
15 using namespace std;
16
17 typedef long long LL;
18 const int maxn = 1000 + 5;
19 const int maxm = 50000 + 5;
20 const LL INF = LONG_LONG_MAX / 4;
21 int v[maxm],w[maxm],first[maxn],nxt[maxm];
22 int n,m,C,cnt[maxn],ecnt;
23 LL d[maxn];
24 bool inq[maxn];
25
26 void solve() {
27     bool bad = false;
28     queue<int> q;
29     q.push(n);
30     for(int i = 0;i <= n;i++) {
31         inq[i] = false;
32         d[i] = INF;
33         cnt[i] = 0;
34     }
35     d[n] = 0;
36     inq[n] = true;
37     cnt[n] = 1;
38     while(!q.empty() && !bad) {
39         int x = q.front(); q.pop();
40         inq[x] = false;
41         for(int i = first[x];i != -1;i = nxt[i]) {
42             if(d[v[i]] > d[x] + w[i]) {
43                 d[v[i]] = d[x] + w[i];
44                 if(!inq[v[i]]) {
45                     q.push(v[i]);
46                     cnt[v[i]]++;
47                     inq[v[i]] = true;
48                     if(cnt[v[i]] > n + 1) {
49                         bad = true; break;
50                     }
51                 }
52             }
53         }
54     }
55     if(bad) puts("Bad Estimations");
56     else printf("%lld\n",-d[0]);
57 }
58
59 void adde(int _u,int _v,int _w) {
60     v[ecnt] = _v; w[ecnt] = _w;
61     nxt[ecnt] = first[_u];
62     first[_u] = ecnt;
63     ecnt++;
64 }
65
66 int main() {
67     while(~scanf("%d%d",&n,&m)) {
68         ecnt = 0;
69         memset(first,-1,sizeof(first));
70         memset(nxt,-1,sizeof(nxt));
71         for(int i = 1;i <= n;i++) {
72            scanf("%d",&C);
73            adde(i - 1,i,C);
74            adde(i,i - 1,0);
75         }
76         for(int i = 1;i <= m;i++) {
77             int a,b,c; scanf("%d%d%d",&a,&b,&c);
78             adde(b,a - 1,-c);
79         }
80         solve();
81     }
82     return 0;
83 }

转载于:https://www.cnblogs.com/rolight/p/3858317.html

ZOJ 2770 Burn the Linked Camp 差分约束+SPFA相关推荐

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

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

  2. zoj 2770 Burn the Linked Camp(火烧连营)

    题意:陆逊已知刘备的每个大营最多能容纳Ci个士兵,并且可以估计到第i个大营到第j个大营至少有多少士兵,求刘备最少有多少个士兵. 分析:根据给出的数据我们可以得到一系列不等式组,考虑采用差分约束系统求解 ...

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

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

  4. HDU3440(差分约束+SPFA算法)

    题意:两栋房子之间的最大距离为D,也就是A-B<=D,现在求出最矮和最高房子之间的最大距离 思路:差分约束+SPFA算法: 当问题可以转化为形如一组 xi‑x'i<=yi 或一组 xi‑x ...

  5. poj1201(差分约束+SPFA)

    看到这道题,其实就是和poj1716是差不多的 题意:给出n个闭整数区间[ai,bi]和n个整数C1,.,cn.计算具有区间[ai,bi]的至少ci公共元素的整数集Z的最小大小,对于每一个i=1,2, ...

  6. poj3169(差分约束+SPFA)

    题意:FJ有N头牛,这些牛都站在一条直线上等待,但是现在给出了一些条件: 1.首先列出哪些牛之间彼此喜欢,以及之间的最大距离,也就是A-B<=X 2.随后列出哪些牛之间彼此不喜欢,以及之间的最小 ...

  7. poj1716(差分约束+SPFA)

    题意:整数间隔[a,b],a<b,是以a开头和以b结尾的所有连续整数的集合.在包含至少两个不同整数的集合中找到每个间隔的最小元素数. 思路:采用差分约束算法:当问题可以转化为形如一组 xi‑x' ...

  8. HDU 1384 Intervals【差分约束-SPFA】

    类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径]. 例子:b−a<=k1,c−b& ...

  9. P1993-小K的农场【差分约束,SPFA】

    正题 题目链接:https://www.luogu.org/problemnew/show/P1993 题目大意 有若干个条件 Wa+w>WbW_a+w>W_bWa​+w>Wb​ W ...

最新文章

  1. 超级细分插件_草图大师必装插件
  2. lol简介/html
  3. GAUSSIAN MIXTURE VAE: LESSONS IN VARIATIONAL INFERENCE, GENERATIVE MODELS, AND DEEP NETS
  4. java properties配置文件_java properties配置文件操作
  5. Intent跳转传list集合
  6. 通过OmniFaces缓存组件以编程方式缓存PrimeFaces图表
  7. 飞畅 8口RS-485集线器产品性能参数介绍
  8. hdu 3074 线段树 OR 树状数组
  9. JSTL之数字、日期格式化fmt:formatNumber/、fmt:formatDate/
  10. C#LeetCode刷题-递归
  11. 一份超详细的MySQL高性能优化实战总结
  12. 矩阵分析与应用课后答案——张贤达版本
  13. 使用JAVASCRIPT进行全屏显示页面,就像触摸屏显示效果
  14. 易会满重磅发声!新证券法将给资本市场带来哪些新变化?证监会职责定位有何新要求?...
  15. win10 C语言qt调试,如何在Windows中调试Qt(MSVC)应用程序
  16. steam链接社区_如何通过Steam链接上的Xbox One控制器启用振动
  17. 网页加载过程+性能优化+安全
  18. Android Studio如何连接手机设备
  19. 三端稳压管怎么接线及方法说明
  20. 如何创建 Ubuntu 信息亭(kiosk)

热门文章

  1. document的window对象
  2. ajax 三种数据格式
  3. LCD1602液晶显示模块的单片机驱动深入详解之硬件篇
  4. MVC与Validate验证提示的样式修改
  5. PHP array_merge() 函数
  6. arch Failed to load module intel
  7. SQL Server:OA权限管理设计的实现 下
  8. 【419天】跃迁之路——程序员高效学习方法论探索系列(实验阶段176-2018.03.31)...
  9. 组件和模块间Activity路由框架
  10. linux忘记root密码怎么办