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 ...
随机推荐
- 第一周CoreIDRAW课总结
一. 问:这节课学到了什么知识? 答:这节课我学到了很多知识,作为初学者的我,老师给我讲了CorelDEAW的启动,安装,基础知识和应用与用途. 基础知识 位图:是由无数个像素点构成的图像,又叫点 ...
- cloneNode和replaceChild
node.cloneNode(deep) var node=document.getElementById("myList2").lastChild.cloneNode(true) ...
- 使用jQuery动态克隆表格,并且添加至div中(使用前需要引入jQuery)
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...
- 基于hi-nginx的web开发(python篇)——utf-8编码
一致地utf-8编码,非常重要.对python2而言,尤其如此. 如果在hi-nginx中使用的是python2,同时又需要无障碍地使用中日韩等文字,那么一定不要忘记使用: #-*- coding:u ...
- c语言字符类型作业
一.PTA实验作业 题目1:7-2 统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 1.定义整形变量i=0,count=0,flag. 2.定义数组str[999] 3.输入str[ ...
- HDFS架构
- java中<> 的用法
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...
- Flask 扩展 Flask-RESTful
Flask路由可以指定HTTP请求方法,并在请求函数中根据不同的请求方法,执行不同的逻辑.这样实现一个Restful的请求已经相当简单了 Flask还有更简便的方法,就是其Flask-RESTful扩 ...
- Nginx配置小结
前两天区听了一堂Nginx的课,然后翻了一下自己之前的Nginx的笔记,做了一个简单的小结. 全局变量 $args : 这个变量等于请求行中的参数,同$query_string $content_le ...
- 进军ABP第一天:ABP理论知识
1.2.3 领域层领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现. ( 实体(Entity ) 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表. ( 仓储(Repo ...