poj 3169 Layout(差分约束+spfa)
题目链接:http://poj.org/problem?id=3169
题意:n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0。这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须 <= w。2.有md组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须 >= w。问如果这n头无法排成队伍,则输出-1,如果牛[1]和牛[n]的距离可以无限远,则输出-2,否则则输出牛[1]和牛[n]之间的最大距离
很明显的差分约束整理一下条件,这些点是按顺序排的。
1.dis[B]-dis[A]<=D1;
2.dis[B]-dis[A]>=D2;
3.dis[B]>=dis[A];
由1得dis[B]<=dis[A]+D1--->dis[B]>dis[A]+D1的最短路条件
由2得dis[A]<=dis[B]+(-D2)--->dis[A]>dis[B]+(-D2)的最短路条件
然后只要判断一下,如果有负环则永远无法到,如果dis[n]=inf那么1~n的距离就可以任意,
否则就是输出dis[n]即可
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <queue>
#define inf 0X3f3f3f3f
using namespace std;
int n , ml , md , a , b , d , dis[1010] , cnt[1010];
struct TnT {
int v , next , w;
}Edge[3000010];
int head[1010] , e;
void init() {
e = 0;
for(int i = 1 ; i <= n ; i++) {
head[i] = -1;
}
}
void add(int u , int v , int w) {
Edge[e].v = v;
Edge[e].w = w;
Edge[e].next = head[u];
head[u] = e++;
}
bool vis[1010];
bool spfa(int sta) {
memset(vis , false , sizeof(vis));
memset(cnt , 0 , sizeof(cnt));
queue<int>q;
q.push(sta);
vis[sta] = true;
dis[sta] = 0;
cnt[sta]++;
while(!q.empty()) {
int u = q.front();
vis[u] = false;
q.pop();
for(int i = head[u] ; i != -1 ; i = Edge[i].next) {
int v = Edge[i].v , w = Edge[i].w;
if(dis[v] > dis[u] + w) {
dis[v] = dis[u] + w;
if(!vis[v]) {
vis[v] = true;
cnt[v]++;
q.push(v);
if(cnt[v] > n)
return false;
}
}
}
}
return true;
}
int main() {
scanf("%d%d%d" , &n , &ml , &md);
init();
for(int i = 1 ; i <= n ; i++) {
dis[i] = inf;
}
for(int i = 1 ; i <= ml ; i++) {
scanf("%d%d%d" , &a , &b , &d);
add(min(a , b) , max(a , b) , d);
}
for(int i = 1 ; i <= md ; i++) {
scanf("%d%d%d" , &a , &b , &d);
add(max(a , b) , min(a , b) , -d);
}
int flag = spfa(1);
if(flag) {
if(dis[n] == inf) {
printf("-2\n");
}
else {
printf("%d\n" , dis[n]);
}
}
else {
printf("-1\n");
}
return 0;
}
poj 3169 Layout(差分约束+spfa)的更多相关文章
- POJ 3169 Layout(差分约束+链式前向星+SPFA)
描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...
- POJ 3169 Layout (差分约束)
题意:给定一些母牛,要求一个排列,有的母牛距离不能超过w,有的距离不能小于w,问你第一个和第n个最远距离是多少. 析:以前只是听说过个算法,从来没用过,差分约束. 对于第 i 个母牛和第 i+1 个, ...
- 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: 6415 Accepted: 3098 Descriptio ...
- POJ 3169 Layout(差分约束 线性差分约束)
题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...
- poj Layout 差分约束+SPFA
题目链接:http://poj.org/problem?id=3169 很好的差分约束入门题目,自己刚看时学呢 代码: #include<iostream> #include<cst ...
- ShortestPath:Layout(POJ 3169)(差分约束的应用)
布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...
- POJ-3169 Layout (差分约束+SPFA)
POJ-3169 Layout:http://poj.org/problem?id=3169 参考:https://blog.csdn.net/islittlehappy/article/detail ...
- poj 3169&hdu3592(差分约束)
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9687 Accepted: 4647 Descriptio ...
- POJ——1364King(差分约束SPFA判负环+前向星)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11946 Accepted: 4365 Description ...
随机推荐
- python3 实现多域名批量访问特定目录(一)
渗透测试之批量处理同一框架CMS系统漏洞 当我们做多网站的渗透测试时,会发现很多站点采用的都是同类型的CMS框架,只要我们发现一个漏洞,那么我们可以批量处理这一类站点,高效测试,如果不知道该站点的框架 ...
- ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)
导读 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safar ...
- Java VisualVM监控远程JVM
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...
- String——字符串
首先看一下string的一部分源码吧 public final class String private final char value[]; 我们暂且只看这两行, 第一行String被final修 ...
- java并发编程(二)----创建并运行java线程
实现线程的两种方式 上一节我们了解了关于线程的一些基本知识,下面我们正式进入多线程的实现环节.实现线程常用的有两种方式,一种是继承Thread类,一种是实现Runnable接口.当然还有第三种方式,那 ...
- java并发编程(二十)----(JUC集合)CopyOnWriteArrayList介绍
这一节开始我们正式来介绍JUC集合类.我们按照List.Set.Map.Queue的顺序来进行介绍.这一节我们来看一下CopyOnWriteArrayList. CopyOnWriteArrayLis ...
- alluxio源码解析-层次化存储(4)
层次化存储-特性介绍: https://www.alluxio.org/docs/1.6/cn/Tiered-Storage-on-Alluxio.html 引入分层存储后,Alluxio管理的数据块 ...
- TCP/UDP对比总结
目录 1 TCP-UDP对比 2 UDP介绍 3 TCP介绍 3.1 可靠传输的原理和实现 3.1.1 可靠传输原理 3.1.2 可靠传输实现 3.2 TCP面向连接管理 3.2.1 建立连接 3.2 ...
- 【Spring Boot】利用 Spring Boot Admin 进行项目监控管理
利用 Spring Boot Admin 进行项目监控管理 一.Spring Boot Admin 是什么 Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spri ...
- js全选与取消全选
实现全选与取消全选的效果 要求1(将军影响士兵):点击全选按钮,下面的复选框全部选中,取消全选按钮,下面的复选框全部取消 思路:复选框是否被选中,取决于check属性,将全选按钮的check属性值赋值 ...