Layout POJ - 3169
题目链接: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的更多相关文章
- ShortestPath:Layout(POJ 3169)(差分约束的应用)
布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...
- 差分约束系统 + spfa(A - Layout POJ - 3169)
题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...
- 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: 11612 Accepted: 5550 Descripti ...
- POJ 3169 Layout (spfa+差分约束)
题目链接:http://poj.org/problem?id=3169 差分约束的解释:http://www.cnblogs.com/void/archive/2011/08/26/2153928.h ...
- POJ 3169 Layout (spfa+差分约束)
题目链接:http://poj.org/problem?id=3169 题目大意:n头牛,按编号1~n从左往右排列,可以多头牛站在同一个点,给出ml行条件,每行三个数a b c表示dis[b]-dis ...
- POJ 3169 Layout (HDU 3592) 差分约束
http://poj.org/problem?id=3169 http://acm.hdu.edu.cn/showproblem.php?pid=3592 题目大意: 一些母牛按序号排成一条直线.有两 ...
- poj 3169 Layout(差分约束+spfa)
题目链接:http://poj.org/problem?id=3169 题意:n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有m ...
- poj 3169 Layout (差分约束)
3169 -- Layout 继续差分约束. 这题要判起点终点是否连通,并且要判负环,所以要用到spfa. 对于ML的边,要求两者之间距离要小于给定值,于是构建(a)->(b)=c的边.同理,对 ...
随机推荐
- 第02组 Alpha冲刺(3/6)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 学习如何评估代码质量 准备Al ...
- 第10组 Beta冲刺(4/4)
队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 继续学习Android studio和Java 制作剩余界面前端 展示GitHub当日代码/文档签入记录 ...
- SUSE12.2 添加ISO为源
152 2019-05-16 16:40:13 mkdir /mnt/DVD1 153 2019-05-16 16:40:55 mount -o loop /root/SLE-12-SP2-Serve ...
- PS 个人常用功能
PS是什么? Adobe Photoshop,简称"PS",是由Adobe Systems开发和发行的图像处理软件. 不是美工,为什么要学PS? 1)写博客时,有些需要的素材图片有 ...
- 使用 KVO 可能会拖慢启动速度
问题  在某一次启动速度优化中,发现最开始的某个 runLoop 中,一个runLoop 耗时很长.发现一个 KVO 变量的初始化消耗了13ms之久,这对启动速度是不可接受了. 源码分析 用 Ins ...
- spark 调优(官方文档)
1.序列化 对象在进行网络传输或进行持久化时需要进行序列化,如果采用序列化慢或者消耗大量字节的序列化格式,则会拖慢计算. spark 提供了两种序列化类库 1). Java serialization ...
- linux_problem
今日自学遇到两个问题:火狐浏览器显示安全错误,按照国内网站上抄来抄去的解决办法并没有解决我的问题,即,每次访问新的网站都会提示"support mozilla.org 的管理员...&quo ...
- Maven 教程(16)— pom.xml 文件详解
原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79733577 <project xmlns="http://ma ...
- idea git使用记录
ps:记录idea中git的使用过程 在IntelliJ IDEA使用.gitignore插件的方法和作用 在IntelliJ IDEA使用.gitignore插件的方法和作用 idea git st ...
- CentOS 安装OpenResty
[1]环境部署 [1] 依赖环境安装 在环境的任意目录执行命令:yum install pcre-devel openssl-devel gcc curl 一路手动输入y 直到Complete,安装完 ...