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的边.同理,对 ...
随机推荐
- js设置元素指定时间隐藏
$().fadeOut(); js指定时间隐藏
- NamedParameterJdbcTemple与RowMapper实现
NamedParameterJdbcTemplate和JdbcTemplate功能基本差不多. 1.配置 db.properties 1 jdbc.user=root 2 jdbc.password= ...
- visual studio code 执行 sp1 文件
需要安装插件PowerShell 如提示 Unsupported PowerShell version 2.0, language features are disabled (不支持的PowerS ...
- python中进程、线程、协程简述
进程 python中使用multiprocessing模块对进程进行操作管理 进程同步(锁.信号量.事件) 锁 —— multiprocessing.Lock 只要用到了锁 锁之间的代码就会变成同步的 ...
- 一台Linux服务器(4C8G配置)可以负载百万个连接?
一台Linux服务器可以负载多少个连接? 首先我们来看如何标识一个TCP连接?系统是通过一个四元组来识别,(src_ip,src_port,dst_ip,dst_port)即源IP.源端口.目标IP. ...
- Python【每日一问】18
问: [基础题]:请解释新式类跟经典类,并说明它们的区别[提高题]:请解释Python垃圾回收机制 答: [基础题]:请解释新式类跟经典类,并说明它们的区别 1.新式类都是继承内置 object 对象 ...
- 在电脑上部署网站lls 浏览器上访问
在win7 上安装,首先是要进入lls中进行设置,这是第一种方法: 通过图形化的操作方式进行设置, 这个界面中的东西都比较重要,电脑出现问题的话一般在这都可以进行调整,程序和功能可以用来管理你安装的软 ...
- Java学习: 面向对象的使用与注意事项
面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...
- Linux中的RCU的那点事
原文:https://zhuanlan.zhihu.com/p/67520807 今天来讲一下这Linux内核中的RCU(Read Copy Update,读复制更新)机制. 我主要参考的 ...
- C#中字符串转换为计算公式
添加COM引用: private void button_Click(object sender, EventArgs e) { MSScriptControl.ScriptControl sc = ...