题目链接: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. 微软SQL Server 2019 全新发布,更新内容亮点都在这里了

    IT之家11月7日消息 在Microsoft   Ignite 2019 大会上,微软正式发布了新一代数据库产品SQL Server 2019.使用统一的数据平台实现业务转型SQL Server 20 ...

  2. SQL和PL/SQL的区别

    SQL和PL/SQL的区别 1. SQL是结构化查询语言,比较接近自然语言,使用SQL,只需要说干什么,不需要说怎么干.由数据定义语言.数据操纵语言.数据控制语言构成,它不面向过程,即前一条语句与后一 ...

  3. 【IntelliJ IDEA学习之一】IntelliJ IDEA安装激活、VM参数

    版本:IntelliJIDEA2018.1.4 特点:比eclipse更耗内存 1.下载 官网下载专业版. 2.安装一直下一步即可. 3.配置文件修改 (1)VM参数 进入安装目录,进入bin目录下, ...

  4. 【Activiti学习之三】Activiti API(二)

    环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.流程定义1.中止与激活流程定义 package com.wjy.pd; import ...

  5. phpstrom 配置getter和setter

    先看一段代码 protected $mddid; /** * @return mixed */ public function getMddid() { return $this->mddid; ...

  6. ASP.NET Core WebApi基于Redis实现Token接口安全认证

    一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebSer ...

  7. Lab_1:练习4——分析bootloader加载ELF格式的OS的过程

    一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...

  8. SpringCloud Stream使用案例

    官方定义 Spring Cloud Stream 是一个构建消息驱动微服务的框架. 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互 ...

  9. 近3年常考的Spring面试题及答案

    1. 一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年.这是第一个支持注解的版本. Spr ...

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

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