题目链接:https://vjudge.net/problem/POJ-3169

题意:有一些奶牛,有些奶牛相互喜欢,他们之间的距离必须小于等于一个K。

有些奶牛相互讨厌,他们之间的距离必须大于等于一个K。问1号奶牛个n号奶牛最远能相距多少距离,

如果无法正常排队,输出 “ -1 ”,如果距离可以无限输出 “ -2 ”。

思路:第一次做差分约束问题,看过一些人的解释,这里写出自己的理解。

题目问的是”1号奶牛个n号奶牛最远能相距多少距离“,如果两个奶牛相互喜欢,那么为了满足题意,

我们可以把他们之间的距离变成他们之间能接受的最大距离,注意,这里有一种情况:

①|x - y| <= k1

②|y - z| <= k2

①②得出,③|x - z| <= k1 + k2

④|x - z| <= k3

为了满足三头奶牛的要求,我们需要得出一个满足①②④的一个相互距离,那么我们需要选min(k1 + k2 , k3)。

这样才能满足三头奶牛的要求。

如果相互讨厌:

①|x - y| >= k1 --> |y - x| <= -k1

②|y - z| >= k2 -->|z - y| <= -k2

①②得出,③|x - z| <= k1 + k2 --> |z - x| <= -(k1 + k2)

④|x - z| <= k3 --> |z - x| <= -k3

这里的负距离表示的是他们之间的距离加上这个负距离如果还是大于等于零的距离的话说明他们直接正常排队。

两个例子:①x和y最远相距1,y和z最远相距1,x和z最近相距3,

     ②x和y最远相距5,y和z最远相距4,x和z最近相距3

可以自己画一下图

那么我们可以表示为 出发点u,目的点v,权值w。

喜欢(u,v,w),不喜欢(v,u,-w)。

如果无法正常排队,说明图中存在负环。可以用两个例子来尝试负环情况,

加上这里的负距离表示的是他们之间的距离加上这个负距离如果还是大于等于零的距离的话说明他们直接正常排队。


 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
#include <cmath>
#include <iomanip>
using namespace std; typedef long long LL;
#define inf (1LL << 25)
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define rep__(i,j,k) for(int i = (j); i < (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define per__(i,j,k) for(int i = (j); i > (k); i--) const int N = ;
int n,ml,md;
int head[N];
int tot[N];
int dis[N];
bool used[N];
int cnt;//链式前项星 struct Edge{ int to;
int w;
int next;
}e[]; void add(int u,int v,int w){ e[cnt].to = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt++;
} void spfa(){ rep(i,,n) dis[i] = inf;
dis[] = ;
queue<int> que;
que.push();
used[] = true; bool ok = true;
while(!que.empty()){
int u = que.front();
que.pop();
used[u] = false;
if(++tot[u] == n){ //判负环
ok = false;
break;
} for(int o = head[u]; ~o; o = e[o].next){
int v = e[o].to;
int w = e[o].w; if(dis[v] > dis[u] + w){
dis[v] = dis[u] + w;
if(!used[v]) que.push(v);
} }
} if(!ok) cout << - << endl;
else if(dis[n] == inf) cout << - << endl;
else cout << dis[n] << endl;
} int main(){ ios::sync_with_stdio(false);
cin.tie(); cin >> n >> ml >> md; rep(i,,n) head[i] = -; int u,v,w;
rep(i,,ml){
cin >> u >> v >> w;
add(u,v,w);
}
rep(i,,md){
cin >> u >> v >> w;
add(v,u,-w);
} spfa(); getchar();getchar(); return ;
}

Layout POJ - 3169的更多相关文章

  1. ShortestPath:Layout(POJ 3169)(差分约束的应用)

                布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...

  2. 差分约束系统 + spfa(A - Layout POJ - 3169)

    题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...

  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: 11612   Accepted: 5550 Descripti ...

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

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

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

    题目链接:http://poj.org/problem?id=3169 题目大意:n头牛,按编号1~n从左往右排列,可以多头牛站在同一个点,给出ml行条件,每行三个数a b c表示dis[b]-dis ...

  7. POJ 3169 Layout (HDU 3592) 差分约束

    http://poj.org/problem?id=3169 http://acm.hdu.edu.cn/showproblem.php?pid=3592 题目大意: 一些母牛按序号排成一条直线.有两 ...

  8. poj 3169 Layout(差分约束+spfa)

    题目链接:http://poj.org/problem?id=3169 题意:n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有m ...

  9. poj 3169 Layout (差分约束)

    3169 -- Layout 继续差分约束. 这题要判起点终点是否连通,并且要判负环,所以要用到spfa. 对于ML的边,要求两者之间距离要小于给定值,于是构建(a)->(b)=c的边.同理,对 ...

随机推荐

  1. 微信第三方平台代公众号发起网页授权 48001 api unauthorized 问题

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&gr ...

  2. git强制推送命令

    git push -f origin master 注释: origin远程仓库名,master分支名,-f为force,意为:强行.强制. 这行命令的意思就是强制用本地的代码去覆盖掉远程仓库的代码, ...

  3. mysql 基本操作二

    1.查询数据 MariaDB [jason]> offset ; 默认是从偏移量为0 处开始查村数据,通过指定offset 可以从offset 处开始取数 2.where 语句 MariaDB ...

  4. maven 打包添加依赖

    1.将依赖与自己的代码打入同一个jar包 只需在pom中添加如下plugin 在include 中添加需要的依赖,在exclude 中添加不需要的依赖 <groupId>org.apach ...

  5. CloseableHttpClient方式配置代理服务器访问外网

    小编最近在负责银行内部项目.其中有模块需要访问天眼查API接口,但由于公司全部内网,所以需要配置代理服务器才可以访问外网接口. 又到了激动人心的上码时刻! public void Connect(Ht ...

  6. [转帖]PostgreSQL 参数调整(性能优化)

    PostgreSQL 参数调整(性能优化) https://www.cnblogs.com/VicLiu/p/11854730.html 知道一个 shared_pool 文章写的挺好的 还没仔细看 ...

  7. 小程序接口无法传递session校验验证码

    今天在写接口的时候发现一个问题,我用apiaaz测试一切正常,但是从小程序接口请求验证码,一直验证失败. 最开始用的图形验证码,查阅了不少资料,最后怀疑是cookie的问题,解决无果,换成了短信验证码 ...

  8. 初步学习async/await,Task.GetAwaiter,Task.Result

    网上关于async/await的知识有很多,看了很多但不如自己实践一遍来得快,所以这里记录下我的理解和大家学习下. 首先以最简单的同步方法来开始如下 private static void Test( ...

  9. php 逻辑题

    越长大约发现,高中学的数学,都还给了数学老师,一点都没有留住. 最近遇到了一个 逻辑题,然后想了半天,后来做出来了,我就发现了,我可能是一个假的理科生.很简单的样子. 废话不说,看看这道题吧. /** ...

  10. Lombok简介、使用、工作原理、优缺点

    1.Lombok简介官方介绍 Project Lombok is a java library that automatically plugs into your editor and build ...