题目链接:

https://vjudge.net/problem/POJ-3169

题目大意:

一些母牛按序号排成一条直线。有两种要求,A和B距离不得超过X,还有一种是C和D距离不得少于Y,问可能的最大距离。如果没有输出-1,如果可以随便排输出-2,否则输出最大的距离。

Sample Input

4 2 1
1 3 10
2 4 20
2 3 3

Sample Output

27

思路:

设xi为第i头牛的x坐标

对于第一种要求,A和B之间距离不超过X(题目中A<B)

那就有:xB - xA <= X

对于第二种要求,A和B之间距离少于X(题目中A<B)

那就有:xB - xA >= X

对于上述两种不等式,可知这道题就是一堆不等式组,可以用差分约束系统来做。

u是起点,v是终点

对于第一种不等式,转化成A->B的边,权值为X

对于第二种不等式,先转化成上述形式,xA - xB <= -X,转化成B->A的边,权值是-X

在题目中隐含了一组不等式xi-1<=xi,转化成上述形式就是xi-1 - xi <= 0,边为i -> i-1权值是0

然后要看题目中求的是什么:

求的是从1到n的最大距离

就等价于xn-x1最大

等价于xn-x1 <= M需要求M的最小值(因为M没有最大值,最大值是正无穷)

这个不等式就是1到n的边,权值为M,说明题目求的是1到n的最短路,如果存在负环,输出-1,如果是INF输出-2,否则输出最短路长度。分析到这里就可以套模板啦

 #include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef pair<int, int> Pair;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int T, n, m, m1, m2;
struct edge
{
int u, v, w;
edge(int u, int v, int w):u(u), v(v), w(w){}
edge(){}
};
edge e[maxn];
int d[], tot;
void addedge(int u, int v, int w)
{
e[tot++] = edge(u, v, w);
}
bool Bellman()
{
int u, v, w;
memset(d, INF, sizeof(d));
d[] = ;
for(int j = ; j < n; j++)
{
for(int i = ; i < tot; i++)
{
u = e[i].u, v = e[i].v, w = e[i].w;
if(d[u] < INF && d[v] > d[u] + w)
{
d[v] = d[u] + w;
if(j == n - )return true;//存在负环,方程组无解
}
}
}
return false;
}
int main()
{
cin >> n >> m1 >> m2;
int u, v, w;
for(int i = ; i < m1; i++)//第一组边,u->v 权值w
{
scanf("%d%d%d", &u, &v, &w);
addedge(u, v, w);
}
for(int i = ; i < m2; i++)//第二组边 v->u 权值-w
{
scanf("%d%d%d", &u, &v, &w);
addedge(v, u, -w);
}
for(int i = ; i < n; i++)//第三组边 i+1->i 权值0
addedge(i + , i, );
if(Bellman())
{
cout<<"-1"<<endl;
}
else
{
if(d[n] == INF)cout<<"-2"<<endl;
else cout<<d[n]<<endl;
}
/*for(int i = 1; i <= n; i++)
{
cout<<i<<":::";
for(int j = 0; j < G[i].size(); j++)cout<<G[i][j].v<<"-"<<G[i][j].w<<" ";
cout<<endl;
}*/
}

POJ-3169 Layout---差分约束系统+Bellman的更多相关文章

  1. POJ 3169 Layout 差分约束系统

    介绍下差分约束系统:就是多个2未知数不等式形如(a-b<=k)的形式 问你有没有解,或者求两个未知数的最大差或者最小差 转化为最短路(或最长路) 1:求最小差的时候,不等式转化为b-a>= ...

  2. PKU 3169 Layout(差分约束系统+Bellman Ford)

    题目大意:原题链接 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相同的 ...

  3. POJ 3169 Layout(差分约束啊)

    题目链接:http://poj.org/problem? id=3169 Description Like everyone else, cows like to stand close to the ...

  4. poj 3169 Layout 差分约束模板题

    Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6415   Accepted: 3098 Descriptio ...

  5. POJ 3169 Layout(差分约束+链式前向星+SPFA)

    描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...

  6. POJ 3169 Layout (差分约束)

    题意:给定一些母牛,要求一个排列,有的母牛距离不能超过w,有的距离不能小于w,问你第一个和第n个最远距离是多少. 析:以前只是听说过个算法,从来没用过,差分约束. 对于第 i 个母牛和第 i+1 个, ...

  7. POJ 3169 Layout(差分约束 线性差分约束)

    题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...

  8. POJ 3169 Layout (差分约束系统)

    Layout 题目链接: Rhttp://acm.hust.edu.cn/vjudge/contest/122685#problem/S Description Like everyone else, ...

  9. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 差分约束的解释:http://www.cnblogs.com/void/archive/2011/08/26/2153928.h ...

  10. poj 3169 Layout(差分约束)

    Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6549   Accepted: 3168 Descriptio ...

随机推荐

  1. 使用jitpack来获取github上的开源项目

    在开发中我们需要经常使用第三方依赖库,在构建工具Gradle或maven中声明依赖, 大部分使用的是maven中心仓库或者阿里云仓库等等,但是这样也存在一个问题,上述仓库的库虽然简单快捷好用,但并不是 ...

  2. Mycat 分片规则详解--日期(天)分片

    实现方式:按照日期来分片 优点:使数据按照日期来进行分时存储 缺点:由于数据是连续的,所以该方案不能有效的利用资源 配置示例: <tableRule name="sharding-by ...

  3. 模拟select选中option的效果

    大致情况如下:网页上有一个表单,表单中有一个select类型的控件,我要选择option后,表单相对应的input部分会option自动填充选中数据. 我想要的是:实现一个网页上的效果,在这个页面被打 ...

  4. 透析thinkphp5升级版开发框架tpframe

    这里将全面的介绍这个框架给我们开发带来的好处,让你们对它有更深层次的认识,喜欢或不喜欢的,欢迎大家前来留言讨论 一.目录层次结构 现在很多的项目,特别是大一点的项目里面,都会有很多的人参与,要进行程序 ...

  5. [poj3461]Oulipo_KMP

    Oulipo poj-3461 题目大意:给你两个字符串s和p,问s中有多少个等于p的子串. 注释:$1\le strlen(p)\le 10^4\qquad1\le strlen(s)\le 10^ ...

  6. Axure RP初学2

  7. Android layout属性之gravity和layout_gravity

    1. gravity用来描述当前view的内容在view中的位置. gravity是控制其内容或者包含的views在该view(或view group)中的位置 2. layout_gravity是表 ...

  8. Spring Boot 入门教程

    Spring Boot 入门教程,包含且不仅限于使用Spring Boot构建API.使用Thymeleaf模板引擎以及Freemarker模板引擎渲染视图.使用MyBatis操作数据库等等.本教程示 ...

  9. 云+社区分享——腾讯云OCR文字识别

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云+社区运营团队发布在腾讯云+社区 前言 2018年3月27日腾讯云云+社区联合腾讯云智能图像团队共同在客户群举办了腾讯云OCR文字识 ...

  10. [高级软件工程教学]团队Alpha阶段成绩汇总

    一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineering/homework/1408 https://edu.cnb ...