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 ...
随机推荐
- codeforces 318 A.Even Odds B.Sereja and Array
A.Even Odds 给你n和k, 把从1到n先排奇数后排偶数排成一个新的序列,输出第k个位置的数. 比如 10 3 拍好后就是 1 3 5 7 9 2 4 6 8 10 第3个数是5. // ...
- 【Python-Django定义用户模型类】Python-Django定义用户模型类详解!!!
定义用户模型类 1. Django默认用户认证系统 Django自带用户认证系统 它处理用户账号.组.权限以及基于cookie的用户会话. Django认证系统位置 django.contrib.au ...
- redis过期策略与内存淘汰机制分析
过期策略: 我们在set key时,可以给一个expire time,就是过期时间 这段过期时间以后,redis对key删除使用:定期删除+惰性删除 定期删除指redis默认在100ms内随机抽取一些 ...
- C程序设计(第四版)课后习题完整版 谭浩强编著
//复习过程中,纯手打,持续更新,觉得好就点个赞吧. 第一章:程序设计和C语言 习题 1.什么是程序?什么是程序设计? 答:程序就是一组计算机能识别和执行的指令.程序设计是指从确定任务到得到结果,写出 ...
- java常见面试题目(二)
部分没有答案可以自行百度. 1.myeclipse与eclipse的区别. 2.说说对maven或者SVN的理解. 3.类的加载过程 (创建对象的过程) 1)子父类里静态属性 赋上默认初始值 如果有 ...
- A human being,who loves football and music
---title: aboutdate: 2019-08-09 20:52:27---[A human being,who loves football and music.](https://eel ...
- Ubuntu 16.04 硬盘安装
自己的宏碁4741G 笔记本,已经用了6年了,最近感觉越来越慢,晚上突然想起装个Linux 玩玩,说干就干,选择了用户比较多的Ubuntu,网上下载16.04的版本,结合网上搜索到的安装教程,看似简单 ...
- egg-sequelize-ts 插件
egg-sequelize-ts plugin 目的 (Purpose) 能让使用 typescript 编写的 egg.js 项目中能够使用 sequelize方法,并同时得到egg.js所赋予的功 ...
- Cause: java.lang.NumberFormatException: For input string: "D"
异常:Cause: java.lang.NumberFormatException: For input string: "D" 问题回显: 原因分析:'D'只有1位,被认为是ch ...
- Elasticsearch6.x和7.x版本常用插件汇总
elasticsearch插件汇总 基于es 7.3版本试用. 一.安全插件 1.x-pack a.介绍 包括安全(x-pack-security),监视(x-pack-watcher),警报(x-p ...