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 ...
随机推荐
- Java生成图片验证码
在日常我们在登录或者注册的时候,网页上会出现验证码让我们填写,其实利用jdk提供给我们的工具类完全可以模拟出来一个生成验证码图片的功能. package util; import javax.imag ...
- 【Python】 用户图形界面GUI wxpython II 布局和事件
wxpython - 布局和事件 这章主要记录布局器Sizer以及事件的用法. // 目前还需要记录的:Sizer的Add方法加空白,Sizer的Layout,Sizer的Remove如何有效 ■ 布 ...
- Algorithm --> 矩阵链乘法
动态规划--矩阵链乘法 1.矩阵乘法 Note:只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义.一个m×r的矩阵A左乘一个r×n的矩阵B,会得到一个m×n的矩阵C. #include ...
- SpringMvc环境搭建(配置文件)
在上面的随笔里已经把搭建springmvc环境的基本需要的包都下下来了,拉下来就是写配置文件了. 下面左图是总的结构,右图是增加包 一.最开始当然是web.xml文件了,这是一个总的宏观配置 < ...
- ASP VNext 开源服务容错处理库Polly使用文档
在进入SOA之后,我们的代码从本地方法调用变成了跨机器的通信.任何一个新技术的引入都会为我们解决特定的问题,都会带来一些新的问题.比如网络故障.依赖服务崩溃.超时.服务器内存与CPU等其它问题.正是因 ...
- 【HTTP协议】---HTTP协议详解
HTTP协议详解 一.HTTP简介 1.HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide We ...
- C语言函函数嵌套
一.实验作业 1.1 PTA题目 设计思路 1.定义整形变量i,if(b==n-1)用于递归的终止,并返回1. 2.for i=b to n ,if(a[i]<a[min]);进行升序排序 3. ...
- networkx 学习
import networkx as nx import pylab import numpy as np #自定义网络 row=np.array([,,,,,,]) col=np.array([,, ...
- [NOI2015]软件包管理器
4621 [NOI2015]软件包管理器 题目等级 : 钻石 Diamond 题目描述 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过 ...
- map的infowindow的show事件(ArcGIS API for JS)