题意:

  • 从1到n,n个数,从左向右依次排列。

    给定两种形式的约束条件:

    1.xi与yi的最大距离为dk

    2.xi与yi的最小距离为dk

    问满足这些限定条件的情况下,数1和n的最大距离是多少?(若约束条件相互矛盾则输出-1,若最大距离能够为无穷大则输出-2)

    知识补充:

    • 差分约束系统的概念:由n个变量和m个约束条件(实数)组成。且都是形如:
      xi−yj≤bk(x,y为变量,b为实数)

      的形式。

    • 用Bellman-Ford算法求解差分约束系统:因为最短路三角不等式:d[v]−d[u]≤e[u,v]与差分约束的不等式形式一样,故构建j到i长度为bk的边来建成一个图,因为可能存在负边所以用Bellman-Ford算法来求解最短路,终于得到的d[i]数组是满足该差分约束系统的一个可行解。
    • 注:若{d[1], d[2], ….. ,d[n]}是差分约束系统的一个可行解,那么{d[1] + x, d[2] + x, ….., d[n] + x}也是可行解。
    • 关于d[n]数组的初始化:假设将原点s到每一个顶点的距离都设置为0,最后求出来的可行解满足这些点相互之间距离最小。假设将当中一个点设为起点。其他点的距离都设置设为INF,那么终于求出来的可行解,满足该起点,到其他每一个点相互之间的距离最大。

    思路:

  • 题目为有三个限制条件的差分约束系统,即:

    d[i]−d[i+1]≤0
    d[BL]−d[AL]≤DL
    d[AD]−d[BD]≤DD

    依据这三个不等式建立图,这里核心难点是:为什么d[n] - d[1](即起点1到终点n的最短距离)就是对于约束条件下,1到n的最长距离?(这里尚未思考明确…..)

代码(代码中的Bellman-Ford算法经过防止负圈优化):

#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
const int INF = 0x3fffffff;
struct edge{int from, to, cost;}E[100009];
int v, n, m, size; void input(void) {
int x, y, z;
for (int i = 0; i < n; i++) {
scanf("%d%d%d", &x, &y, &z);
E[size++] = (edge){x - 1, y - 1, z};
}
for (int i = 0; i < m; i++) {
scanf("%d%d%d", &x, &y, &z);
E[size++] = (edge){y - 1, x - 1, -z};
}
} int bellman_ford(void) {
int d[v];
fill(d, d + v, INF);
d[0] = 0;
for (int k = 0; k < v; k++) { //因为可能存在负圈会无限更新的情况要注意设置更新次数上限为顶点个数。
bool update = false;
for (int i = 0; i < size; i++) {
if(d[E[i].to] > d[E[i].from] + E[i].cost && d[E[i].from] < INF) {
update = true;
d[E[i].to] = d[E[i].from] + E[i].cost;
}
}
if(!update) break;
}
if(d[0] < 0) return -1;
if(d[v - 1] == INF) return -2;
return d[v - 1];
} int main(void)
{
while (~scanf("%d%d%d", &v, &n, &m)) {
size = 0;
for (int i = 0; i < v - 1; i++) {
E[size++] = (edge){i + 1, i, 0}; //这个形式非常有趣
}
input();
printf("%d\n", bellman_ford());
}
return 0;
}

poj3169 差分约束系统的更多相关文章

  1. POJ3169差分约束系统

    题意:有n头牛,编号为1到n,对于关系好的ml头牛,al和bl之间的距离不大于dl,关系差的md头牛,ad和bd之间的距离不大于dd,求第1头牛和第n头牛之间的距离 分析:这是一道差分约束系统的题目, ...

  2. 【图论】POJ-3169 差分约束系统

    一.题目 Description Like everyone else, cows like to stand close to their friends when queuing for feed ...

  3. UVA11478 Halum [差分约束系统]

    https://vjudge.net/problem/UVA-11478 给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的 ...

  4. BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5395  Solved: 1750[Submit][Status ...

  5. ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)

    当对问题建立数学模型后,发现其是一个差分方程组,那么问题可以转换为最短路问题,一下分别选用Bellmanford-SPFA解题 ZOJ2770-Burn the Linked Camp //差分约束方 ...

  6. POJ1201 Intervals(差分约束系统)

    与ZOJ2770一个建模方式,前缀和当作点. 对于每个区间[a,b]有这么个条件,Sa-Sb-1>=c,然后我就那样连边WA了好几次. 后来偷看数据才想到这题还有两个隐藏的约束条件. 这题前缀和 ...

  7. UVA 11374 Halum (差分约束系统,最短路)

    题意:给定一个带权有向图,每次你可以选择一个结点v 和整数d ,把所有以v为终点的边权值减少d,把所有以v为起点的边权值增加d,最后要让所有的边权值为正,且尽量大.若无解,输出结果.若可无限大,输出结 ...

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

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

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

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

随机推荐

  1. n行m列矩阵顺时针填写1~n*m

    程序效果图如下: 程序参考代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ...

  2. tree编译

    没有tree命令,就需要下载源代码 [root@fyc tree-1.7.0]#cd /opt/src [root@fyc tree-1.7.0]# wget ftp://mama.indstate. ...

  3. 题解 P3128 【[USACO15DEC]最大流Max Flow】

    此类型题目有两种比较常见的做法:树链剖分和树上差分. 本题有多组修改一组询问,因此树上差分会比树链剖分优秀很多. 这里两种方法都进行介绍. 树链剖分和树上差分的本质都是将一颗树转换为一个区间,然后进行 ...

  4. Qt之QThread

    简述 QThread类提供了与系统无关的线程. QThread代表在程序中一个单独的线程控制.线程在run()中开始执行,默认情况下,run()通过调用exec()启动事件循环并在线程里运行一个Qt的 ...

  5. HDU 3016 Man Down(线段树)

    HDU 3016 Man Down 题目链接 题意:是男人就下100层的游戏的简单版,每次仅仅能从两端下落.求落地最大血量 思路:利用线段树能够处理出每一个线段能来自哪几个线段.然后就是dag最长路了 ...

  6. Atitit.html解析器的选型&#160;jsoup&#160;nsoup&#160;,java&#160;c#&#160;.net&#160;版本号

    Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本号 1. 框架选型的要求 1 1.1. 文档多 1 1.2. 跨平台 1 2. html解析器特性: 1 2 ...

  7. Querying mergeinfo requires version 3 of the FSFS filesystem schema svn右键没菜单

    svn 报错,Querying mergeinfo requires version 3 of the FSFS filesystem schema 经过查询,是svn客户端和服务端版本不一致造成的. ...

  8. log_archive_min_succeed_dest

    博客上.看了一大神的文章:http://blog.csdn.net/msdnchina/article/details/45141427 我表示有疑问:归档日志路径爆满,那么对于开启归档模式的数据库, ...

  9. IP address could not be resolved: Temporary failure in name resolution

    今早发现mysql日志中有非常多例如以下的警告: 140724 18:41:25 [Warning] IP address '172.16.18.217' could not be resolved: ...

  10. cpc,tank

    先保存一段错误的代码 #include<iostream> #include<cstdio> #include<cstring> #include<algor ...