POJ3169:Layout(差分约束)
http://poj.org/problem?id=3169
题意:
一堆牛在一条直线上按编号站队,在同一位置可以有多头牛并列站在一起,但编号小的牛所占的位置不能超过编号大的牛所占的位置,这里用d[i]表示编 号为i的牛所处的位置,即要满足d[i]-d[i+1]<=0,同时每两头牛之间有以下两种关系(对于输入的a b d来说):
1>如果是喜欢关系:即需要满足d[b]-d[a]<=d
2>如果是讨厌关系:即需要满足d[b]-a[a]>=d ……> d[a]-d[b]<=-d
由于题目要求队伍的最大可能长度,即求满足以下三个约束条件的最大值,,由于此处是求最大值,故用Bellman_Ford算法求约束图的最短路径.
1>对于ML有:d[b]-d[a]<=d
2>对于MD有:d[a]-d[b]<=-d
3>对于n个顶点的约束图有:s[i]-s[i+1]<=0(隐含条件)
题目的解为:有负环输出-1,d[n]无穷大输出-2,其他输出dist[n].
在差分约束系统中如果题目要求是求最小值,就将约束条件转化为">="形式,然后用Bellman_Ford算法求解约束图的最长路径,如果题目要
求的是最大值,就将约束条件转化为"<="形式,然后用Bellman_Ford算法求解约束图的最短路径.
PS:
(1)INF不能开得太大,可能会溢出;
(2)数组尽量开小,不然会比较慢
如果有负环,输出-1,如果N可以无限远,即1与N不连通,输出-2,其他情况输出1与N的最大距离。(最短路)
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <queue>
#define N 1000001
using namespace std;
int n,m,k,tt;
int head[],v[],dis[];
struct node
{
int x,y,z;
int next;
} q[];
void init()
{
memset(head,-,sizeof(head));
tt=;
}
void add(int xx,int yy,int zz)
{
q[tt].x=xx;
q[tt].y=yy;
q[tt].z=zz;
q[tt].next=head[xx];
head[xx]=tt++;
}
void SPFA()
{
for(int i=; i<=n; i++)
{
dis[i]=N;
v[i]=;
}
dis[]=;
v[]=;
queue<int>p;
p.push();
while(!p.empty())
{
int ff=p.front();
p.pop();
v[ff]=;
for(int i=head[ff]; i!=-; i=q[i].next)
{
if(dis[q[i].y]>dis[ff]+q[i].z)
{
dis[q[i].y]=dis[ff]+q[i].z;
if(dis[q[i].y]<)//不存在最短路(这题是实际问题,不会出现负边//或者根据有顶点入队列的次数大于n)
{
printf("-1\n");
return ;
}
if(!v[q[i].y])
{
v[q[i].y]=;
p.push(q[i].y);
}
}
}
}
if(dis[n]==N) printf("-2\n");//1到n没有路
else printf("%d\n",dis[n]);
return ;
}
int main()
{
int xx,yy,zz;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
init();
for(int i=; i<=m; i++)
{
scanf("%d%d%d",&xx,&yy,&zz);
add(xx,yy,zz);
}
for(int i=; i<=k; i++)
{
scanf("%d%d%d",&xx,&yy,&zz);
add(yy,xx,-zz);
}
for(int i=; i<n; i++)//隐含条件
{
add(i+,i,);
}
SPFA();
}
return ;
}
POJ3169:Layout(差分约束)的更多相关文章
- POJ-3169 Layout (差分约束+SPFA)
POJ-3169 Layout:http://poj.org/problem?id=3169 参考:https://blog.csdn.net/islittlehappy/article/detail ...
- POJ3169 Layout(差分约束系统)
POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...
- 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 Layout 差分约束+SPFA
题目链接:http://poj.org/problem?id=3169 很好的差分约束入门题目,自己刚看时学呢 代码: #include<iostream> #include<cst ...
- poj 3169 Layout 差分约束模板题
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6415 Accepted: 3098 Descriptio ...
- POJ 3169 Layout(差分约束啊)
题目链接:http://poj.org/problem? id=3169 Description Like everyone else, cows like to stand close to the ...
- POJ 3169 Layout(差分约束 线性差分约束)
题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...
- Bellman-Ford算法:POJ No.3169 Layout 差分约束
#define _CRT_SECURE_NO_WARNINGS /* 4 2 1 1 3 10 2 4 20 2 3 3 */ #include <iostream> #include & ...
随机推荐
- css3整理--rgba
rgba语法: rgba(0, 0, 0,0.5); 第一个参数:R 红色(0-255) 第二个参数:G 绿色(0-255) 第三个参数:B 蓝色(0-255) 第四个参数:透明度(0-1)使用rgb ...
- 解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题
昨天公司终于大发慈悲,统一更换电脑配置,终于要摆脱“手扶拖拉机”的时代了,赶上“动车时代”了.不过不想换硬盘,因为重新要安装太多东西,环境配置一大堆,所以就硬盘没有换,不过当我开机启动的时候,悲剧发生 ...
- 题目1016:火星A+B(进制新问题)
题目链接:http://ac.jobdu.com/problem.php?pid=1016 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- jconsole连接远程Tomcat应用
一.环境信息 远程tomcat:linux 64位 centos 7 上tomcat 8 本机:windows7 二.步骤 linux上,在tomcat安装目录的bin下,新建setenv.sh,内容 ...
- innodb 锁机制
InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我 ...
- jquery validator
jQuery.validate是一款非常不错的表单验证工具,简单易上手,而且能达到很好的体验效果,虽然说在项目中早已用过,但看到这篇文章写得还是不错的,转载下与大家共同分享. 一.用前必备 官方网站: ...
- Telnet是什么意思又是什么协议 Telnet有什么作用及功能
Telnet是teletype network的缩写,专业的说,Telnet是Internet上远程登录的一种程序:它可以让您的电脑通过网络登录到网络另一端的电脑上,甚至还可以存取那台电脑上的文件. ...
- Sass预定义一些常用的样式
一.编写sass文件时, 目录不能有中文, 如: E:\\CPC手机, 会报错exception while processing events: incompatible character enc ...
- Artech的MVC4框架学习——第四章Model元数据的解析
总结: 第一Model元数据是针对 数据类型的一种表述信息. 第二Model元数据作用:控制数据类型本身及其成员,通过相应的特性,在view中 为绑定的数据(Model)实现模版化的html呈现. 第 ...
- 如何使用Gradle的maven-publish将jar包或者war包上传到nexus仓库
首先,在build.gradle里边声明依赖maven-publish插件: apply plugin: 'maven-publish' 然后,配置项目的信息和和nexus的信息: publishin ...