题目链接: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. Computer-Hunters——项目需求分析

    Computer-Hunters--项目需求分析 前言 本次作业属于2019秋福大软件工程实践Z班 本次作业要求 团队名称: Computer-Hunters 本次作业目标:撰写一份针对团队项目的需求 ...

  2. 转 史上最详细的Hadoop环境搭建

    GitChat 作者:鸣宇淳 原文:史上最详细的Hadoop环境搭建 关注公众号:GitChat 技术杂谈,一本正经的讲技术 [不要错过文末活动哦] 前言 Hadoop在大数据技术体系中的地位至关重要 ...

  3. C# IE浏览器操作类

    using System; using System.Collections.Generic; using System.Drawing; using System.Runtime.InteropSe ...

  4. 记录ssis的两个异常解决办法

    1.Foreach文件枚举提示变量为空的解决办法:把foreach属性窗口中的DelayValidation设置为True就可以了 2.csv导入数据库提示:无法在 unicode 和非 unicod ...

  5. winform 通用自动更新程序

    通用自动更新程序 主要功能: 1. 可用于 C/S 程序的更新,集成到宿主主程序非常简单和配置非常简单,或不集成到主程序独立运行. 2. 支持 HTTP.FTP.WebService等多种更新下载方式 ...

  6. Appium 滑动踩坑记

    前言 对于不同java-client版本,很多的API已经产生大的变化,所以一些API大家会发现已经失效或者使用方式发生了变化,滑动就是其中一项,这篇文章对滑动在不同的java-client版本以及不 ...

  7. 解决:Java source1.6不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符

    diamond运算符,指的是JDK1.7的一个新特性.Maven默认用的是JDK1.6去编译.所以需要配置成更高的版本,有以下几种解决办法: 1.在项目pom.xml中加入下面的配置即可 <pr ...

  8. FusionInsight大数据开发---Hive应用开发

    Hive应用开发 了解Hive的基本架构原理 掌握JDBC客户端开发流程 了解ODBC客户端的开发流程 了解python客户端的开发流程 了解Hcatalog/webHcat开发接口 掌握Hive开发 ...

  9. centos lnmp一键安装

    安装 系统需求: 需要2 GB硬盘剩余空间 128M以上内存,OpenVZ的建议192MB以上(小内存请勿使用64位系统) Linux下区分大小写,输入命令时请注意! 安装步骤: 1.使用putty或 ...

  10. 使用GitHub搜索技巧

    in:name example 名字中有"example"in:readme example readme中有"example"in:description e ...