POJ 3169 Layout 【差分约束】+【spfa】
<题目链接>
题目大意:
一些母牛按序号排成一条直线。有两种要求,A和B距离不得超过X,还有一种是C和D距离不得少于Y,问可能的最大距离。如果没有最大距离输出-1,如果1、n之间距离任意就输出-2,否则输出最大的距离。
解题分析:
典型的差分约束,第一种约束,v-u<=c;第二种约束:v-u>=c 可以转化为 u-v<=c ,还有一种约束,因为题目要求按序号排序,所以 loc[i] - loc[i-1]>=0 ,即 loc[i-1]-loc[i]<=0 。以上就是本题的三种约束,利用上述三种约束建图,然后跑一遍最短路即可,因为可能存在负权边,所以用spfa求解。当该图存在负环的时候输出-1,当1~n不连通的时候输出-2,否则输出1---->n的最短边权约束和。即所求的最大距离。
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std; const int N =1e3+;
const int M =2e5+;
#define INF 0x3f3f3f3f
struct EDGE{
int to,val,next;
}edge[M];
int head[N],dis[N],cnt[N],tot,n,ml,md;
bool vis[N]; void init(){
memset(head,-,sizeof(head));
tot=;
}
void add(int u,int v,int w){
edge[++tot].to=v,edge[tot].val=w;
edge[tot].next=head[u],head[u]=tot;
}
int spfa(int s){ //因为存在负权边,所以用spfa求最短路
memset(dis,INF,sizeof(dis));
memset(vis,false,sizeof(vis));
memset(cnt,,sizeof(cnt));
queue<int>q;
q.push(s);
vis[s]=true,cnt[s]=,dis[s]=;
while(!q.empty()){
int cur=q.front();
q.pop();
vis[cur]=false;
for(int i=head[cur];~i;i=edge[i].next){
int v=edge[i].to;
if(dis[v]>dis[cur]+edge[i].val){
dis[v]=dis[cur]+edge[i].val;
if(!vis[v]){
vis[v]=true;
if(++cnt[v]>n)return -; //进队列次数>n,说明存在负环,直接返回-1
q.push(v);
}
}
}
}
if(dis[n]==INF)return -; //如果两点不连通,说明1、n两点之间没有约束条件,所以1、n可以距离任意远,返回-2
return dis[n];
}
int main(){
while(scanf("%d%d%d",&n,&ml,&md)!=EOF){
init();
for(int i=;i<=n;i++)add(i,i-,); //代表s[i-1]-s[i]<=0
for(int i=;i<=ml;i++){
int u,v,c;scanf("%d%d%d",&u,&v,&c);
add(u,v,c); //v-u<=c
}
for(int i=;i<=md;i++){
int u,v,c;scanf("%d%d%d",&u,&v,&c);
add(v,u,-c); //u-v<=-c,即v-u>=c
}
//利用题目条件,整合成三个差分约束条件,利用这几个条件建图,然后跑一遍最短路
printf("%d\n",spfa());
}
}
2018-10-11
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 ...
随机推荐
- swift 学习- 20 -- 错误处理
// 错误处理 是响应错误以及 从错误中恢复的过程, Swift 提供了在运行时对 可恢复错误的 抛出, 捕获, 传递 和 操作的支持 // 某些操作无法保证总是执行完所有代码 或总是生层有用结果, ...
- Linux下Oracle 12c的卸载
注:本文来源于:<Linux下Oracle 12c的卸载> 与Windows下Oracle的安装容易卸载麻烦相反,Linux下Oracle的安装麻烦下载简单. 1.关闭Oracle数据库 ...
- 通过$broadcast或$emit在子级和父级controller之间进行值传递
通过$broadcast或$emit在controller之间进行值传递,不过这些controller必须是子级或者父级关系, $emit只能向父级parent controller传递事件event ...
- cf949C 建模,SCC缩点
/* 给定n个数据中心,m份资料,每份资料在其中的两个中心备份,一天可供下载的时间是h小时 中心i在第hi小时需要维护,无法下载 现在要将一些中心的维护时间往后推1小时,使得任意时刻每份资料都可以被下 ...
- poj2942 求v-DCC,二分图判奇环,补图
/* 给定一张无向图,求有多少点不被任何奇环包含 推论1:如果两个点属于两个不同的v-DCC,则他们不可能在同一个奇环内 推论2:某个v-DCC中有奇环,则这个v-DCC中所有点必定被属于某个奇环 只 ...
- Allegro PCB Design GXL (legacy) 设置十字大光标
Allegro PCB Design GXL (legacy) version 16.6-2015 1.菜单:Setup > User Preferences... 2.User Prefere ...
- 论文阅读笔记十七:RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation(CVPR2017)
论文源址:https://arxiv.org/abs/1611.06612 tensorflow代码:https://github.com/eragonruan/refinenet-image-seg ...
- Java+selenium之WebDriver的cookie,等待等高级操作(五)
1. 操作cookie // 增加一个 name = "name",value="value" 的 cookie Cookie cookie = new Coo ...
- Debug.Assert vs Exception Throwing(转载)
来源 Q: I've read plenty of articles (and a couple of other similar questions that were posted on Stac ...
- tornado中form表单验证详解
#!/usr/bin/env python# _*_ coding:utf-8 _*_import tornado.webimport tornado.ioloopimport re class Ba ...