POJ-3169 Layout---差分约束系统+Bellman
题目链接:
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的更多相关文章
- POJ 3169 Layout 差分约束系统
介绍下差分约束系统:就是多个2未知数不等式形如(a-b<=k)的形式 问你有没有解,或者求两个未知数的最大差或者最小差 转化为最短路(或最长路) 1:求最小差的时候,不等式转化为b-a>= ...
- PKU 3169 Layout(差分约束系统+Bellman Ford)
题目大意:原题链接 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相同的 ...
- POJ 3169 Layout(差分约束啊)
题目链接:http://poj.org/problem? id=3169 Description Like everyone else, cows like to stand close to the ...
- poj 3169 Layout 差分约束模板题
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6415 Accepted: 3098 Descriptio ...
- POJ 3169 Layout(差分约束+链式前向星+SPFA)
描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...
- POJ 3169 Layout (差分约束)
题意:给定一些母牛,要求一个排列,有的母牛距离不能超过w,有的距离不能小于w,问你第一个和第n个最远距离是多少. 析:以前只是听说过个算法,从来没用过,差分约束. 对于第 i 个母牛和第 i+1 个, ...
- POJ 3169 Layout(差分约束 线性差分约束)
题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...
- POJ 3169 Layout (差分约束系统)
Layout 题目链接: Rhttp://acm.hust.edu.cn/vjudge/contest/122685#problem/S Description Like everyone else, ...
- POJ 3169 Layout (spfa+差分约束)
题目链接:http://poj.org/problem?id=3169 差分约束的解释:http://www.cnblogs.com/void/archive/2011/08/26/2153928.h ...
- poj 3169 Layout(差分约束)
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6549 Accepted: 3168 Descriptio ...
随机推荐
- Linux目录结构和基础知识
目录结构: /bin:存放系统常用的命令程序 /boot:系统启动或引导所需要的一些文件 /dev:可用的设备文件 /etc:系统配置相关的东西 /home:所有用户的主目录 /lib,lib64:存 ...
- 剑指Offer-字符流中第一个不重复的字符
package String; import java.util.LinkedHashMap; import java.util.Map; /** * 字符流中第一个不重复的字符 * 题目描述 * 请 ...
- 走近webpack(3)--图片的处理
上一章,咱们学了如何用webpack来打包css,压缩js等.这一篇文章咱们来学习一下如何用webpack来处理图片.废话不多说,咱们开始吧. 首先,咱们随便找一张你喜欢的图片放到src/images ...
- python全栈开发-Day2 布尔、流程控制、循环
python全栈开发-Day2 布尔 流程控制 循环 一.布尔 1.概述 #布尔值,一个True一个False #计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人 ...
- Mycat 分片规则详解--范围取模分片
实现方式:该算法先进行范围分片,计算出分片组,组内在取模 优点:综合了范围分片和取模分片的优点,分片组内使用取模可以保证组内的数据分布比较均匀,分片组之间采用范围分片可以兼顾范围分片的特点,事先规划好 ...
- eclipse编码设置
- STL --> stack栈
stack栈 c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO),使用该容器时需要包含#include<stack>头文件: 定义stack对象示例: s ...
- Ubuntu如何配置SSH免密登录
前言 在搭建hadoop集群时,需要主机和副机之间实现SSH免密登录 一.环境准备 1.ubuntu两台 二.安装SSH 1.首先检测一下本机有没有安装SSH服务,如果没有任何打印说明未安装 sudo ...
- Beta第六天
听说
- 网络1712--c语言函数作业总结
作业亮点 1.总体情况 很多同学在思路方面大部分写的都很详细,能够通过思路回顾自己的代码 大部分同学都认真完成PTA,也充分利用了函数来解题 大部分同学能够从上机考试中总结自己的失误和不足点,制订了自 ...