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 ...
随机推荐
- Java的家庭记账本程序(A)
日期:2019.2.1 博客期:028 星期五 其实我早就开始开发“家庭记账本”的软件了,只不过写博客写的有点晚,我是打算先做web的!因为Android Studio的教程,还是要对应版本,好多问题 ...
- django 中的闪现
导包 from django.contrib import messages #输出格式 messages.success(request,'不能为空') #前端页面的写法 {%if messages ...
- Centos下安装软件的常用方法
1.源码安装: 需要手动编译.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). tar -zxvf filename.tar.gz 通常在解压缩后产生的文件中,有名为" ...
- day14 迭代器 生成器 面向过程思想
"" 迭代器 什么是迭代器(iterator) 器指的某种工具, 迭代指的是更新换代的过程,例如应用程序的版本更新从1.0 变成 1.1 再1.2 迭代的目的是要根据上一个结果,产 ...
- poj2728 生成树01分数规划 (二分答案)
给定整数序列a,b,求出下式的最大值 sum{ai*xi}/sum{bi*xi},xi=0|1 通俗来说,就是选出一些整数对(ai,bi),使得选出的a之和与选出的b之和商最大化 二分答案L,即选出的 ...
- jenkins持续集成:jenkins+SVN
实现jenkins从svn拉取最新的代码,再执行驱动脚本进行自动化测试 新建一个任务 输入任务名,选“构建一个自由风格的软件项目”,点左下角“确定” 丢弃旧的构建,如下设置为保留3天内的10条构建记录 ...
- 第七周学习总结-C#
2018年8月26日 这个周二突然得知另一位老师留的暑假作业,群文件里早就上传了,我居然一直没翻到那里,要不是同学问作业做完没,我可能开学就要“真●裸考”了
- vue 在.vue文件里监听路由
监听路由 watch $route vue项目中的App.vue 文件 <template> <div id="app"> <!--includ ...
- PXE+HTTP+TFTP+Kickstart实现无人值守部署centos6.10
在联网的状态下安装所需软件: Shell> yum install dhcp httpd tftp-server xinetd syslinux system-config-kickstart ...
- easyui之自定义字体图标(鼠标覆盖时切换颜色)
项目要求是自定义字体图标,使用easyui框架结构,众所周知easyui强功能弱样式,字体图标其实就是一张图片.要达到切换图标颜色的效果,要么就是有两套图,使用js控制.但是我这个人比较懒,不喜欢做复 ...