POJ 3169 Layout (差分约束)
题意:给定一些母牛,要求一个排列,有的母牛距离不能超过w,有的距离不能小于w,问你第一个和第n个最远距离是多少。
析:以前只是听说过个算法,从来没用过,差分约束。
对于第 i 个母牛和第 i+1 个,D[i] - D[i+1] <= 0, D[j] -D[i ]<= k, D[i] - D[j] <= - k,那么这个题就可以用差分约束来求这个不等式组了。
1.对于差分不等式,a - b <= c ,建一条 b 到 a 的权值为 c 的边,求的是最短路,得到的是最大值(本题求的就是最大值),对于不等式 a - b >= c ,建一条 b 到 a 的权值为 c 的边,求的是最长路,得到的是最小值。
2.如果检测到负环,那么无解。
3.如果d[n]没有更新,那么可以是任意解。
代码如下:
- #include <cstdio>
- #include <string>
- #include <cstdlib>
- #include <cmath>
- #include <iostream>
- #include <cstring>
- #include <set>
- #include <queue>
- #include <algorithm>
- #include <vector>
- #include <map>
- using namespace std ;
- typedef long long LL;
- typedef pair<int, int> P;
- const int INF = 0x3f3f3f3f;
- const double inf = 0x3f3f3f3f3f3f3f;
- const double eps = 1e-8;
- const int maxn = 10000 + 5;
- const int dr[] = {0, 0, -1, 1};
- const int dc[] = {-1, 1, 0, 0};
- int n, m;
- struct node{
- int to, w, next, from;
- };
- int cnt = 0;
- node G[maxn<<1];
- int d[maxn];
- void add(int u, int v, int w){
- G[cnt].w = w;
- G[cnt].to = v;
- G[cnt++].from = u;
- }
- bool Bell_Ford(){
- for(int i = 1; i <= n; ++i) d[i] = INF;
- d[1] = 0;
- for(int i = 0; i < n; ++i){
- for(int j = 0; j < cnt; ++j){
- int u = G[j].from;
- int v = G[j].to;
- int w = G[j].w;
- if(d[u] < INF && d[v] > d[u] + w){
- d[v] = d[u] + w;
- }
- }
- }
- for(int j = 0; j < cnt; ++j){
- int u = G[j].from;
- int v = G[j].to;
- int w = G[j].w;
- if(d[u] < INF && d[v] > d[u] + w)
- return true;
- }
- return false;
- }
- int main(){
- // freopen("in.txt", "r", stdin);
- int ml, md, u, v, w;
- cin >> n >> ml >> md;
- cnt = 0;
- for(int i = 0; i < ml; ++i){
- scanf("%d %d %d", &u, &v, &w);
- if(u < v) swap(u, v);
- add(v, u, w);
- }
- for(int i = 0; i < md; ++i){
- scanf("%d %d %d", &u, &v, &w);
- if(u < v) swap(u, v);
- add(u, v, -w);
- }
- if(Bell_Ford()) printf("-1\n");
- else if(d[n] == INF) printf("-2\n");
- else printf("%d\n", d[n]);
- return 0;
- }
POJ 3169 Layout (差分约束)的更多相关文章
- 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(差分约束啊)
题目链接: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(差分约束 线性差分约束)
题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...
- ShortestPath:Layout(POJ 3169)(差分约束的应用)
布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...
- poj 3169&hdu3592(差分约束)
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9687 Accepted: 4647 Descriptio ...
- Bellman-Ford算法:POJ No.3169 Layout 差分约束
#define _CRT_SECURE_NO_WARNINGS /* 4 2 1 1 3 10 2 4 20 2 3 3 */ #include <iostream> #include & ...
- POJ 3169 Layout 差分约束系统
介绍下差分约束系统:就是多个2未知数不等式形如(a-b<=k)的形式 问你有没有解,或者求两个未知数的最大差或者最小差 转化为最短路(或最长路) 1:求最小差的时候,不等式转化为b-a>= ...
- POJ 3169 Layout (spfa+差分约束)
题目链接:http://poj.org/problem?id=3169 差分约束的解释:http://www.cnblogs.com/void/archive/2011/08/26/2153928.h ...
随机推荐
- 进程描述符task_struct
1.进程状态 volatile long state; int exit_state; state成员的可能取值如下: #define TASK_RUNNING 0 #define TA ...
- POJ 3692 Kindergarten (补图是二分图的最大团问题)
题意 幼稚园里有m个男孩和n个女孩(m.n范围都是[1,200]),男孩之间相互认识,女孩之间也相互认识,另外有部分男孩和女孩也认识.现在要举办一个活动,选取一些同学,要求所有选取的同学之间两两相互认 ...
- 介绍 Android 的 Camera 框架
总体介绍 Android Camera 框架从整体上看是一个 client/service 的架构,有两个进程:一个是 client 进 程,可以看成是 AP 端,主要包括 JAVA 代码与一些 na ...
- Windows pyqt4 bat自动转换UI文件-->.pyw文件
/***************************************************************************** * Windows pyqt4 bat自动 ...
- Android 动画 6问6答
1.view 动画有哪些需要注意的? 答:view动画 本身比较简单.http://www.cnblogs.com/punkisnotdead/p/5179115.html 看这篇文章的第五问就可以了 ...
- windows 不能在本地计算机启动apache2 的解决方法(不是修改端口)
使用命令行运行apache目录下的httpd程序,它会提示哪里出错了,修改即可 D:\Program Files (x86)\Apache2.\bin\httpd
- shell 中数学计算总结
shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法,以后用到的时候可以来看,呵呵. 1.错误方法举例 a) var=1+1 echo $var ...
- 8、NFC技术:让Android自动打开网页
创建封装Uri的NdefRecord public NdefRecord createUri(String uriString); public NdefRecord cre ...
- android启动页优化实践
最近观看友盟统计发现App启动页跳出率很高,观看启动页的平均启动时间为2.8s,如下图: 所以一个很现实的问题就出来了,优化启动页面... (一)做了什么? 我们的启动页面主要用于展示启动页面,加载网 ...
- MVC的路由
MVC的路由包括以下几部分 路由名称,路由URL,路由的初始值,路由的约束,路由的命名空间 routes.MapRoute( name: "Default", url: " ...